1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
#![warn(missing_docs)]
//! `mediasan-common` is a common library shared by the `mediasan` media format "sanitizers".
#[macro_use]
pub mod macros;
pub mod async_skip;
pub mod error;
pub mod parse;
mod skip;
pub mod sync;
pub mod util;
use std::io;
use std::pin::Pin;
use std::task::{Context, Poll};
use derive_more::{Deref, DerefMut};
//
// public types
//
pub use error::{Error, Report, Result, ResultExt};
/// A pointer to a span in the given input.
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
pub struct InputSpan {
    /// The offset from the beginning of the input where the span begins.
    pub offset: u64,
    /// The length of the span.
    pub len: u64,
}
/// A subset of the [`Seek`] trait, providing a cursor which can skip forward within a stream of bytes.
pub trait Skip {
    /// Skip an amount of bytes in a stream.
    ///
    /// A skip beyond the end of a stream is allowed, but behavior is defined by the implementation.
    fn skip(&mut self, amount: u64) -> io::Result<()>;
    /// Returns the current position of the cursor from the start of the stream.
    fn stream_position(&mut self) -> io::Result<u64>;
    /// Returns the length of this stream, in bytes.
    fn stream_len(&mut self) -> io::Result<u64>;
}
/// A subset of the [`AsyncSeek`] trait, providing a cursor which can skip forward within a stream of bytes.
pub trait AsyncSkip {
    /// Skip an amount of bytes in a stream.
    ///
    /// A skip beyond the end of a stream is allowed, but behavior is defined by the implementation.
    fn poll_skip(self: Pin<&mut Self>, cx: &mut Context<'_>, amount: u64) -> Poll<io::Result<()>>;
    /// Returns the current position of the cursor from the start of the stream.
    fn poll_stream_position(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<io::Result<u64>>;
    /// Returns the length of this stream, in bytes.
    fn poll_stream_len(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<io::Result<u64>>;
}
/// An adapter implementing [`Skip`]/[`AsyncSkip`] for all types implementing [`Seek`]/[`AsyncSeek`].
#[derive(Clone, Copy, Debug, Default, Deref, DerefMut)]
pub struct SeekSkipAdapter<T: ?Sized>(pub T);
pub use async_skip::AsyncSkipExt;