aboutsummaryrefslogtreecommitdiff
path: root/matroska/src/unflatten.rs
diff options
context:
space:
mode:
Diffstat (limited to 'matroska/src/unflatten.rs')
-rw-r--r--matroska/src/unflatten.rs83
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() {}
- }
-}