diff options
Diffstat (limited to 'matroska/src/unflatten.rs')
-rw-r--r-- | matroska/src/unflatten.rs | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/matroska/src/unflatten.rs b/matroska/src/unflatten.rs deleted file mode 100644 index d5fb887..0000000 --- a/matroska/src/unflatten.rs +++ /dev/null @@ -1,83 +0,0 @@ -/* - This file is part of jellything (https://codeberg.org/metamuffin/jellything) - which is licensed under the GNU Affero General Public License (version 3); see /COPYING. - Copyright (C) 2025 metamuffin <metamuffin.org> -*/ -use crate::{matroska::MatroskaTag, Master, Result}; - -pub struct Unflat<'a> { - pub item: MatroskaTag, - pub children: Option<Unflatten<'a>>, - pub position: Option<u64>, -} - -pub struct Unflatten<'a> { - inner: &'a mut dyn Iterator<Item = Result<(Option<u64>, MatroskaTag)>>, - stop: bool, - end: Option<MatroskaTag>, -} - -impl<'a> Unflatten<'a> { - pub fn new(inner: &'a mut dyn Iterator<Item = Result<(Option<u64>, MatroskaTag)>>) -> Self { - Self { - inner, - stop: false, - end: None, - } - } - pub fn new_with_end( - inner: &'a mut dyn Iterator<Item = Result<(Option<u64>, MatroskaTag)>>, - start: MatroskaTag, - ) -> Self { - Self { - inner, - stop: false, - end: Some(MatroskaTag::construct_master(start.id(), Master::End).unwrap()), - } - } - pub fn exit_dirty(&mut self) { - self.stop = true; - } - - pub fn n(&mut self) -> Option<Result<Unflat<'_>>> { - if self.stop { - return None; - } - match self.inner.next() { - None => None, - Some(Err(e)) => Some(Err(e)), - Some(Ok((position, item))) => { - let master = MatroskaTag::is_master(item.id()).unwrap(); - if Some(&item) == self.end.as_ref() { - self.stop = true; - None - } else { - Some(Ok(Unflat { - position, - children: if master { - let end = - MatroskaTag::construct_master(item.id(), Master::End).unwrap(); - if end == item { - return None; - } - Some(Unflatten { - inner: self.inner, - stop: false, - end: Some(end), - }) - } else { - None - }, - item, - })) - } - } - } - } -} - -impl Drop for Unflatten<'_> { - fn drop(&mut self) { - while self.n().is_some() {} - } -} |