xref: /xiu/library/container/flv/src/errors.rs (revision 69de9bbd)
16685cacbSHarlanC use {
2ccd9a1faSHarlan     bytesio::bits_errors::BitError,
36685cacbSHarlanC     bytesio::bytes_errors::{BytesReadError, BytesWriteError},
46685cacbSHarlanC     failure::{Backtrace, Fail},
57f3675feSHarlan     h264_decoder::errors::H264Error,
66685cacbSHarlanC     std::fmt,
76685cacbSHarlanC };
815fa2386SHarlanC 
915fa2386SHarlanC #[derive(Debug, Fail)]
1015fa2386SHarlanC pub enum TagParseErrorValue {
11*69de9bbdSHarlanC     #[fail(display = "bytes read error")]
1215fa2386SHarlanC     BytesReadError(BytesReadError),
13*69de9bbdSHarlanC     #[fail(display = "tag data length error")]
1415fa2386SHarlanC     TagDataLength,
15*69de9bbdSHarlanC     #[fail(display = "unknow tag type error")]
1615fa2386SHarlanC     UnknownTagType,
1715fa2386SHarlanC }
1815fa2386SHarlanC #[derive(Debug)]
1915fa2386SHarlanC pub struct TagParseError {
2015fa2386SHarlanC     pub value: TagParseErrorValue,
2115fa2386SHarlanC }
2215fa2386SHarlanC 
2315fa2386SHarlanC impl From<BytesReadError> for TagParseError {
from(error: BytesReadError) -> Self2415fa2386SHarlanC     fn from(error: BytesReadError) -> Self {
2515fa2386SHarlanC         TagParseError {
2615fa2386SHarlanC             value: TagParseErrorValue::BytesReadError(error),
2715fa2386SHarlanC         }
2815fa2386SHarlanC     }
2915fa2386SHarlanC }
3015fa2386SHarlanC 
3115fa2386SHarlanC impl fmt::Display for TagParseError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result3215fa2386SHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3315fa2386SHarlanC         fmt::Display::fmt(&self.value, f)
3415fa2386SHarlanC     }
3515fa2386SHarlanC }
3615fa2386SHarlanC 
3715fa2386SHarlanC impl Fail for TagParseError {
cause(&self) -> Option<&dyn Fail>3815fa2386SHarlanC     fn cause(&self) -> Option<&dyn Fail> {
3915fa2386SHarlanC         self.value.cause()
4015fa2386SHarlanC     }
4115fa2386SHarlanC 
backtrace(&self) -> Option<&Backtrace>4215fa2386SHarlanC     fn backtrace(&self) -> Option<&Backtrace> {
4315fa2386SHarlanC         self.value.backtrace()
4415fa2386SHarlanC     }
4515fa2386SHarlanC }
4615fa2386SHarlanC #[derive(Debug)]
4713bac29aSHarlan pub struct FlvMuxerError {
4815fa2386SHarlanC     pub value: MuxerErrorValue,
4915fa2386SHarlanC }
5015fa2386SHarlanC 
5115fa2386SHarlanC #[derive(Debug, Fail)]
5215fa2386SHarlanC pub enum MuxerErrorValue {
5315fa2386SHarlanC     // #[fail(display = "server error")]
5415fa2386SHarlanC     // Error,
5515fa2386SHarlanC     #[fail(display = "bytes write error")]
5615fa2386SHarlanC     BytesWriteError(BytesWriteError),
5715fa2386SHarlanC }
5815fa2386SHarlanC 
5913bac29aSHarlan impl From<BytesWriteError> for FlvMuxerError {
from(error: BytesWriteError) -> Self6015fa2386SHarlanC     fn from(error: BytesWriteError) -> Self {
6113bac29aSHarlan         FlvMuxerError {
6215fa2386SHarlanC             value: MuxerErrorValue::BytesWriteError(error),
6315fa2386SHarlanC         }
6415fa2386SHarlanC     }
6515fa2386SHarlanC }
6615fa2386SHarlanC 
6713bac29aSHarlan impl fmt::Display for FlvMuxerError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result6815fa2386SHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6915fa2386SHarlanC         fmt::Display::fmt(&self.value, f)
7015fa2386SHarlanC     }
7115fa2386SHarlanC }
7215fa2386SHarlanC 
7313bac29aSHarlan impl Fail for FlvMuxerError {
cause(&self) -> Option<&dyn Fail>7413bac29aSHarlan     fn cause(&self) -> Option<&dyn Fail> {
7513bac29aSHarlan         self.value.cause()
7613bac29aSHarlan     }
7713bac29aSHarlan 
backtrace(&self) -> Option<&Backtrace>7813bac29aSHarlan     fn backtrace(&self) -> Option<&Backtrace> {
7913bac29aSHarlan         self.value.backtrace()
8013bac29aSHarlan     }
8113bac29aSHarlan }
8213bac29aSHarlan 
8315fa2386SHarlanC #[derive(Debug)]
8415fa2386SHarlanC pub struct FlvDemuxerError {
8515fa2386SHarlanC     pub value: DemuxerErrorValue,
8615fa2386SHarlanC }
8715fa2386SHarlanC 
8815fa2386SHarlanC #[derive(Debug, Fail)]
8915fa2386SHarlanC pub enum DemuxerErrorValue {
9015fa2386SHarlanC     // #[fail(display = "server error")]
9115fa2386SHarlanC     // Error,
92*69de9bbdSHarlanC     #[fail(display = "bytes write error:{}", _0)]
936685cacbSHarlanC     BytesWriteError(#[cause] BytesWriteError),
94*69de9bbdSHarlanC     #[fail(display = "bytes read error:{}", _0)]
956685cacbSHarlanC     BytesReadError(#[cause] BytesReadError),
96*69de9bbdSHarlanC     #[fail(display = "mpeg avc error:{}", _0)]
9706c50324SHarlan     MpegAvcError(#[cause] Mpeg4AvcHevcError),
98*69de9bbdSHarlanC     #[fail(display = "mpeg aac error:{}", _0)]
996685cacbSHarlanC     MpegAacError(#[cause] MpegAacError),
10015fa2386SHarlanC }
10115fa2386SHarlanC 
10215fa2386SHarlanC impl From<BytesWriteError> for FlvDemuxerError {
from(error: BytesWriteError) -> Self10315fa2386SHarlanC     fn from(error: BytesWriteError) -> Self {
10415fa2386SHarlanC         FlvDemuxerError {
10515fa2386SHarlanC             value: DemuxerErrorValue::BytesWriteError(error),
10615fa2386SHarlanC         }
10715fa2386SHarlanC     }
10815fa2386SHarlanC }
10915fa2386SHarlanC 
11015fa2386SHarlanC impl From<BytesReadError> for FlvDemuxerError {
from(error: BytesReadError) -> Self11115fa2386SHarlanC     fn from(error: BytesReadError) -> Self {
11215fa2386SHarlanC         FlvDemuxerError {
11315fa2386SHarlanC             value: DemuxerErrorValue::BytesReadError(error),
11415fa2386SHarlanC         }
11515fa2386SHarlanC     }
11615fa2386SHarlanC }
11715fa2386SHarlanC 
11806c50324SHarlan impl From<Mpeg4AvcHevcError> for FlvDemuxerError {
from(error: Mpeg4AvcHevcError) -> Self11906c50324SHarlan     fn from(error: Mpeg4AvcHevcError) -> Self {
12015fa2386SHarlanC         FlvDemuxerError {
12115fa2386SHarlanC             value: DemuxerErrorValue::MpegAvcError(error),
12215fa2386SHarlanC         }
12315fa2386SHarlanC     }
12415fa2386SHarlanC }
12515fa2386SHarlanC 
12615fa2386SHarlanC impl From<MpegAacError> for FlvDemuxerError {
from(error: MpegAacError) -> Self12715fa2386SHarlanC     fn from(error: MpegAacError) -> Self {
12815fa2386SHarlanC         FlvDemuxerError {
12915fa2386SHarlanC             value: DemuxerErrorValue::MpegAacError(error),
13015fa2386SHarlanC         }
13115fa2386SHarlanC     }
13215fa2386SHarlanC }
13315fa2386SHarlanC 
13415fa2386SHarlanC impl fmt::Display for FlvDemuxerError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result13515fa2386SHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
13615fa2386SHarlanC         fmt::Display::fmt(&self.value, f)
13715fa2386SHarlanC     }
13815fa2386SHarlanC }
13915fa2386SHarlanC 
1406685cacbSHarlanC impl Fail for FlvDemuxerError {
cause(&self) -> Option<&dyn Fail>1416685cacbSHarlanC     fn cause(&self) -> Option<&dyn Fail> {
1426685cacbSHarlanC         self.value.cause()
1436685cacbSHarlanC     }
1446685cacbSHarlanC 
backtrace(&self) -> Option<&Backtrace>1456685cacbSHarlanC     fn backtrace(&self) -> Option<&Backtrace> {
1466685cacbSHarlanC         self.value.backtrace()
1476685cacbSHarlanC     }
1486685cacbSHarlanC }
1496685cacbSHarlanC 
15015fa2386SHarlanC #[derive(Debug, Fail)]
1516685cacbSHarlanC pub enum MpegErrorValue {
152*69de9bbdSHarlanC     #[fail(display = "bytes read error:{}", _0)]
1536685cacbSHarlanC     BytesReadError(#[cause] BytesReadError),
154*69de9bbdSHarlanC     #[fail(display = "bytes write error:{}", _0)]
1556685cacbSHarlanC     BytesWriteError(#[cause] BytesWriteError),
156*69de9bbdSHarlanC     #[fail(display = "bits error:{}", _0)]
157ccd9a1faSHarlan     BitError(#[cause] BitError),
158*69de9bbdSHarlanC     #[fail(display = "h264 error:{}", _0)]
159ccd9a1faSHarlan     H264Error(#[cause] H264Error),
160*69de9bbdSHarlanC     #[fail(display = "there is not enough bits to read")]
16115fa2386SHarlanC     NotEnoughBitsToRead,
162*69de9bbdSHarlanC     #[fail(display = "should not come here")]
16315fa2386SHarlanC     ShouldNotComeHere,
164*69de9bbdSHarlanC     #[fail(display = "the sps nal unit type is not correct")]
165ccd9a1faSHarlan     SPSNalunitTypeNotCorrect,
16615fa2386SHarlanC }
16715fa2386SHarlanC #[derive(Debug)]
16806c50324SHarlan pub struct Mpeg4AvcHevcError {
1696685cacbSHarlanC     pub value: MpegErrorValue,
17015fa2386SHarlanC }
17115fa2386SHarlanC 
17206c50324SHarlan impl From<BytesReadError> for Mpeg4AvcHevcError {
from(error: BytesReadError) -> Self17315fa2386SHarlanC     fn from(error: BytesReadError) -> Self {
17406c50324SHarlan         Mpeg4AvcHevcError {
1756685cacbSHarlanC             value: MpegErrorValue::BytesReadError(error),
17615fa2386SHarlanC         }
17715fa2386SHarlanC     }
17815fa2386SHarlanC }
17915fa2386SHarlanC 
18006c50324SHarlan impl From<BytesWriteError> for Mpeg4AvcHevcError {
from(error: BytesWriteError) -> Self18115fa2386SHarlanC     fn from(error: BytesWriteError) -> Self {
18206c50324SHarlan         Mpeg4AvcHevcError {
1836685cacbSHarlanC             value: MpegErrorValue::BytesWriteError(error),
18415fa2386SHarlanC         }
18515fa2386SHarlanC     }
18615fa2386SHarlanC }
18715fa2386SHarlanC 
18806c50324SHarlan impl From<H264Error> for Mpeg4AvcHevcError {
from(error: H264Error) -> Self189ccd9a1faSHarlan     fn from(error: H264Error) -> Self {
19006c50324SHarlan         Mpeg4AvcHevcError {
191ccd9a1faSHarlan             value: MpegErrorValue::H264Error(error),
192ccd9a1faSHarlan         }
193ccd9a1faSHarlan     }
194ccd9a1faSHarlan }
195ccd9a1faSHarlan 
19606c50324SHarlan impl fmt::Display for Mpeg4AvcHevcError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result1976685cacbSHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1986685cacbSHarlanC         fmt::Display::fmt(&self.value, f)
1996685cacbSHarlanC     }
2006685cacbSHarlanC }
2016685cacbSHarlanC 
20206c50324SHarlan impl Fail for Mpeg4AvcHevcError {
cause(&self) -> Option<&dyn Fail>2036685cacbSHarlanC     fn cause(&self) -> Option<&dyn Fail> {
2046685cacbSHarlanC         self.value.cause()
2056685cacbSHarlanC     }
2066685cacbSHarlanC 
backtrace(&self) -> Option<&Backtrace>2076685cacbSHarlanC     fn backtrace(&self) -> Option<&Backtrace> {
2086685cacbSHarlanC         self.value.backtrace()
2096685cacbSHarlanC     }
2106685cacbSHarlanC }
2116685cacbSHarlanC 
21215fa2386SHarlanC #[derive(Debug)]
21315fa2386SHarlanC pub struct MpegAacError {
2146685cacbSHarlanC     pub value: MpegErrorValue,
21515fa2386SHarlanC }
21615fa2386SHarlanC 
21715fa2386SHarlanC impl From<BytesReadError> for MpegAacError {
from(error: BytesReadError) -> Self21815fa2386SHarlanC     fn from(error: BytesReadError) -> Self {
21915fa2386SHarlanC         MpegAacError {
2206685cacbSHarlanC             value: MpegErrorValue::BytesReadError(error),
22115fa2386SHarlanC         }
22215fa2386SHarlanC     }
22315fa2386SHarlanC }
22415fa2386SHarlanC 
22515fa2386SHarlanC impl From<BytesWriteError> for MpegAacError {
from(error: BytesWriteError) -> Self22615fa2386SHarlanC     fn from(error: BytesWriteError) -> Self {
22715fa2386SHarlanC         MpegAacError {
2286685cacbSHarlanC             value: MpegErrorValue::BytesWriteError(error),
22915fa2386SHarlanC         }
23015fa2386SHarlanC     }
23115fa2386SHarlanC }
23215fa2386SHarlanC 
233ccd9a1faSHarlan impl From<BitError> for MpegAacError {
from(error: BitError) -> Self234ccd9a1faSHarlan     fn from(error: BitError) -> Self {
235ccd9a1faSHarlan         MpegAacError {
236ccd9a1faSHarlan             value: MpegErrorValue::BitError(error),
237ccd9a1faSHarlan         }
238ccd9a1faSHarlan     }
239ccd9a1faSHarlan }
240ccd9a1faSHarlan 
2416685cacbSHarlanC impl fmt::Display for MpegAacError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result2426685cacbSHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2436685cacbSHarlanC         fmt::Display::fmt(&self.value, f)
2446685cacbSHarlanC     }
2456685cacbSHarlanC }
2466685cacbSHarlanC 
2476685cacbSHarlanC impl Fail for MpegAacError {
cause(&self) -> Option<&dyn Fail>2486685cacbSHarlanC     fn cause(&self) -> Option<&dyn Fail> {
2496685cacbSHarlanC         self.value.cause()
2506685cacbSHarlanC     }
2516685cacbSHarlanC 
backtrace(&self) -> Option<&Backtrace>2526685cacbSHarlanC     fn backtrace(&self) -> Option<&Backtrace> {
2536685cacbSHarlanC         self.value.backtrace()
2546685cacbSHarlanC     }
2556685cacbSHarlanC }
2566685cacbSHarlanC 
25715fa2386SHarlanC #[derive(Debug, Fail)]
25815fa2386SHarlanC pub enum BitVecErrorValue {
259*69de9bbdSHarlanC     #[fail(display = "not enough bits left")]
26015fa2386SHarlanC     NotEnoughBits,
26115fa2386SHarlanC }
26215fa2386SHarlanC #[derive(Debug)]
26315fa2386SHarlanC pub struct BitVecError {
26415fa2386SHarlanC     pub value: BitVecErrorValue,
26515fa2386SHarlanC }
266