vp9_parser/
error.rs

1//! VP9 parser errors.
2
3use std::error::Error;
4
5/// Errors that can occur when parsing VP9 frames.
6#[derive(Debug)]
7pub enum Vp9ParserError {
8    /// A `bitreader::BitReaderError`.
9    BitReaderError(bitreader::BitReaderError),
10    /// A `std::io::Error`.
11    IoError(std::io::Error),
12    /// A `TryFromSliceError`.
13    TryFromSliceError(std::array::TryFromSliceError),
14    /// A `TryFromIntError`.
15    TryFromIntError(std::num::TryFromIntError),
16    /// Invalid frame marker.
17    InvalidFrameMarker,
18    /// Invalid padding.
19    InvalidPadding,
20    /// Invalid sync byte.
21    InvalidSyncByte,
22    /// Invalid reference frame index.
23    InvalidRefFrameIndex,
24    /// Invalid metadata.
25    InvalidMetadata,
26    /// Invalid frame_size byte size.
27    InvalidFrameSizeByteSize(usize),
28}
29
30impl std::fmt::Display for Vp9ParserError {
31    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
32        match self {
33            Vp9ParserError::BitReaderError(err) => {
34                write!(f, "{:?}", err.source())
35            }
36            Vp9ParserError::IoError(err) => {
37                write!(f, "{:?}", err.source())
38            }
39            Vp9ParserError::TryFromSliceError(err) => {
40                write!(f, "{:?}", err.source())
41            }
42            Vp9ParserError::TryFromIntError(err) => {
43                write!(f, "{:?}", err.source())
44            }
45            Vp9ParserError::InvalidFrameMarker => {
46                write!(f, "invalid frame marker")
47            }
48            Vp9ParserError::InvalidPadding => {
49                write!(f, "invalid padding")
50            }
51            Vp9ParserError::InvalidSyncByte => {
52                write!(f, "invalid sync byte")
53            }
54            Vp9ParserError::InvalidRefFrameIndex => {
55                write!(f, "invalid reference frame index")
56            }
57            Vp9ParserError::InvalidMetadata => {
58                write!(f, "invalid metadata")
59            }
60            Vp9ParserError::InvalidFrameSizeByteSize(size) => {
61                write!(f, "invalid frame_size byte size: {}", size)
62            }
63        }
64    }
65}
66
67impl From<std::io::Error> for Vp9ParserError {
68    fn from(err: std::io::Error) -> Vp9ParserError {
69        Vp9ParserError::IoError(err)
70    }
71}
72
73impl From<std::array::TryFromSliceError> for Vp9ParserError {
74    fn from(err: std::array::TryFromSliceError) -> Vp9ParserError {
75        Vp9ParserError::TryFromSliceError(err)
76    }
77}
78
79impl From<std::num::TryFromIntError> for Vp9ParserError {
80    fn from(err: std::num::TryFromIntError) -> Vp9ParserError {
81        Vp9ParserError::TryFromIntError(err)
82    }
83}
84
85impl From<bitreader::BitReaderError> for Vp9ParserError {
86    fn from(err: bitreader::BitReaderError) -> Vp9ParserError {
87        Vp9ParserError::BitReaderError(err)
88    }
89}
90
91impl std::error::Error for Vp9ParserError {
92    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
93        match *self {
94            Vp9ParserError::IoError(ref e) => Some(e),
95            Vp9ParserError::TryFromSliceError(ref e) => Some(e),
96            Vp9ParserError::TryFromIntError(ref e) => Some(e),
97            Vp9ParserError::BitReaderError(ref e) => Some(e),
98            _ => None,
99        }
100    }
101}