cadmpeg_core/decode/
whole_input.rs1use std::io::SeekFrom;
5
6use crate::decode::View;
7use crate::{CodecError, ReadSeek};
8
9#[derive(Debug, Clone, Copy)]
14pub struct WholeInput<'a> {
15 view: View<'a>,
16}
17
18impl<'a> WholeInput<'a> {
19 pub fn of_source(
24 prefix: View<'a>,
25 source: &mut dyn ReadSeek,
26 ) -> Result<Option<Self>, CodecError> {
27 let entry = source.stream_position()?;
28 let length = source.seek(SeekFrom::End(0));
29 source.seek(SeekFrom::Start(entry))?;
30 let length = length?;
31 let whole =
32 prefix.start() == 0 && crate::decode::u64_from_index(prefix.window().len()) == length;
33 Ok(whole.then_some(Self { view: prefix }))
34 }
35
36 pub fn view(self) -> View<'a> {
38 self.view
39 }
40}
41
42#[cfg(test)]
43mod tests;