1 use std::io; 2 use thiserror::Error; 3 4 pub type Result<T> = std::result::Result<T, Error>; 5 6 #[derive(Error, Debug, PartialEq)] 7 #[non_exhaustive] 8 pub enum Error { 9 #[error("stream is nil")] 10 ErrNilStream, 11 #[error("incomplete frame header")] 12 ErrIncompleteFrameHeader, 13 #[error("incomplete frame data")] 14 ErrIncompleteFrameData, 15 #[error("incomplete file header")] 16 ErrIncompleteFileHeader, 17 #[error("IVF signature mismatch")] 18 ErrSignatureMismatch, 19 #[error("IVF version unknown, parser may not parse correctly")] 20 ErrUnknownIVFVersion, 21 22 #[error("file not opened")] 23 ErrFileNotOpened, 24 #[error("invalid nil packet")] 25 ErrInvalidNilPacket, 26 27 #[error("bad header signature")] 28 ErrBadIDPageSignature, 29 #[error("wrong header, expected beginning of stream")] 30 ErrBadIDPageType, 31 #[error("payload for id page must be 19 bytes")] 32 ErrBadIDPageLength, 33 #[error("bad payload signature")] 34 ErrBadIDPagePayloadSignature, 35 #[error("not enough data for payload header")] 36 ErrShortPageHeader, 37 #[error("expected and actual checksum do not match")] 38 ErrChecksumMismatch, 39 40 #[error("data is not a H264 bitstream")] 41 ErrDataIsNotH264Stream, 42 #[error("Io EOF")] 43 ErrIoEOF, 44 45 #[allow(non_camel_case_types)] 46 #[error("{0}")] 47 Io(#[source] IoError), 48 #[error("{0}")] 49 Rtp(#[from] rtp::Error), 50 51 #[error("{0}")] 52 Other(String), 53 } 54 55 #[derive(Debug, Error)] 56 #[error("io error: {0}")] 57 pub struct IoError(#[from] pub io::Error); 58 59 // Workaround for wanting PartialEq for io::Error. 60 impl PartialEq for IoError { eq(&self, other: &Self) -> bool61 fn eq(&self, other: &Self) -> bool { 62 self.0.kind() == other.0.kind() 63 } 64 } 65 66 impl From<io::Error> for Error { from(e: io::Error) -> Self67 fn from(e: io::Error) -> Self { 68 Error::Io(IoError(e)) 69 } 70 } 71