diff options
Diffstat (limited to 'remuxer/src/trim_writer.rs')
-rw-r--r-- | remuxer/src/trim_writer.rs | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/remuxer/src/trim_writer.rs b/remuxer/src/trim_writer.rs deleted file mode 100644 index 2c1b7ed..0000000 --- a/remuxer/src/trim_writer.rs +++ /dev/null @@ -1,72 +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 anyhow::anyhow; -use log::{trace, warn}; -use std::{ - io::{Seek, Write}, - ops::Range, -}; - -pub struct TrimWriter<W> { - inner: W, - position: usize, - range: Range<usize>, -} -impl<W: Write> TrimWriter<W> { - pub fn new(inner: W, range: Range<usize>) -> Self { - Self { - inner, - range, - position: 0, - } - } -} - -impl<W: Write> Write for TrimWriter<W> { - fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> { - let start = self.range.start as isize - self.position as isize; - let end = self.range.end as isize - self.position as isize; - - let start = start.clamp(0, buf.len() as isize) as usize; - let end = end.clamp(0, buf.len() as isize) as usize; - - if self.position >= self.range.end { - return Err(std::io::Error::other(anyhow!("range ended"))); - } - - let tbuf = &buf[start..end]; - Ok(if !tbuf.is_empty() { - trace!("trim={start}..{end} avail={}", buf.len()); - let sz = self.inner.write(tbuf)?; - self.position += sz; - sz - } else { - trace!("skip={}", buf.len()); - buf.len() - }) - } - - fn flush(&mut self) -> std::io::Result<()> { - self.inner.flush() - } -} - -impl<W> Seek for TrimWriter<W> { - fn seek(&mut self, pos: std::io::SeekFrom) -> std::io::Result<u64> { - match pos { - std::io::SeekFrom::Start(s) => self.position = s as usize, - std::io::SeekFrom::End(_) => unimplemented!(), - std::io::SeekFrom::Current(s) => self.position += s as usize, - } - if self.position > self.range.end { - warn!( - "seeked beyond end: pos={} end={}", - self.position, self.range.end - ) - } - Ok(self.position as u64) - } -} |