1use std::error::Error;
4
5#[derive(Debug)]
7pub enum Vp9ParserError {
8 BitReaderError(bitreader::BitReaderError),
10 IoError(std::io::Error),
12 TryFromSliceError(std::array::TryFromSliceError),
14 TryFromIntError(std::num::TryFromIntError),
16 InvalidFrameMarker,
18 InvalidPadding,
20 InvalidSyncByte,
22 InvalidRefFrameIndex,
24 InvalidMetadata,
26 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}