xref: /xiu/protocol/rtmp/src/cache/errors.rs (revision ccd9a1fa)
1067fdd3cSHarlanC use {
2067fdd3cSHarlanC     crate::{amf0::errors::Amf0WriteError, chunk::errors::PackError},
3*ccd9a1faSHarlan     bytesio::bytes_errors::BytesReadError,
46685cacbSHarlanC     failure::{Backtrace, Fail},
5*ccd9a1faSHarlan     h264::errors::H264Error,
6067fdd3cSHarlanC     std::fmt,
7*ccd9a1faSHarlan     xflv::errors::{FlvDemuxerError, MpegAacError, MpegAvcError},
8067fdd3cSHarlanC };
901b8b8feSHarlanC 
1001b8b8feSHarlanC #[derive(Debug, Fail)]
1101b8b8feSHarlanC pub enum CacheErrorValue {
1216394c08SHarlanC     #[fail(display = "cache tag parse error\n")]
13abfa5883SHarlanC     DemuxerError(FlvDemuxerError),
14*ccd9a1faSHarlan     #[fail(display = "mpeg aac error\n")]
15*ccd9a1faSHarlan     MpegAacError(MpegAacError),
16*ccd9a1faSHarlan     #[fail(display = "mpeg avc error\n")]
17*ccd9a1faSHarlan     MpegAvcError(MpegAvcError),
18f8169385SHarlanC     #[fail(display = "pack error\n")]
1901b8b8feSHarlanC     PackError(PackError),
20*ccd9a1faSHarlan     #[fail(display = "read bytes error\n")]
21*ccd9a1faSHarlan     BytesReadError(BytesReadError),
22*ccd9a1faSHarlan     #[fail(display = "h264 error\n")]
23*ccd9a1faSHarlan     H264Error(H264Error),
2401b8b8feSHarlanC }
2501b8b8feSHarlanC 
26a4485a6eSHarlanC impl fmt::Display for CacheError {
27a4485a6eSHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
28a4485a6eSHarlanC         fmt::Display::fmt(&self.value, f)
29a4485a6eSHarlanC     }
30a4485a6eSHarlanC }
31a4485a6eSHarlanC #[derive(Debug)]
3201b8b8feSHarlanC pub struct CacheError {
3301b8b8feSHarlanC     pub value: CacheErrorValue,
3401b8b8feSHarlanC }
3501b8b8feSHarlanC 
36abfa5883SHarlanC impl From<FlvDemuxerError> for CacheError {
37abfa5883SHarlanC     fn from(error: FlvDemuxerError) -> Self {
3801b8b8feSHarlanC         CacheError {
39abfa5883SHarlanC             value: CacheErrorValue::DemuxerError(error),
4001b8b8feSHarlanC         }
4101b8b8feSHarlanC     }
4201b8b8feSHarlanC }
4301b8b8feSHarlanC 
44*ccd9a1faSHarlan impl From<H264Error> for CacheError {
45*ccd9a1faSHarlan     fn from(error: H264Error) -> Self {
46*ccd9a1faSHarlan         CacheError {
47*ccd9a1faSHarlan             value: CacheErrorValue::H264Error(error),
48*ccd9a1faSHarlan         }
49*ccd9a1faSHarlan     }
50*ccd9a1faSHarlan }
51*ccd9a1faSHarlan 
52*ccd9a1faSHarlan impl From<MpegAacError> for CacheError {
53*ccd9a1faSHarlan     fn from(error: MpegAacError) -> Self {
54*ccd9a1faSHarlan         CacheError {
55*ccd9a1faSHarlan             value: CacheErrorValue::MpegAacError(error),
56*ccd9a1faSHarlan         }
57*ccd9a1faSHarlan     }
58*ccd9a1faSHarlan }
59*ccd9a1faSHarlan 
60*ccd9a1faSHarlan impl From<MpegAvcError> for CacheError {
61*ccd9a1faSHarlan     fn from(error: MpegAvcError) -> Self {
62*ccd9a1faSHarlan         CacheError {
63*ccd9a1faSHarlan             value: CacheErrorValue::MpegAvcError(error),
64*ccd9a1faSHarlan         }
65*ccd9a1faSHarlan     }
66*ccd9a1faSHarlan }
67*ccd9a1faSHarlan 
68*ccd9a1faSHarlan impl From<BytesReadError> for CacheError {
69*ccd9a1faSHarlan     fn from(error: BytesReadError) -> Self {
70*ccd9a1faSHarlan         CacheError {
71*ccd9a1faSHarlan             value: CacheErrorValue::BytesReadError(error),
72*ccd9a1faSHarlan         }
73*ccd9a1faSHarlan     }
74*ccd9a1faSHarlan }
75*ccd9a1faSHarlan 
7601b8b8feSHarlanC impl From<PackError> for CacheError {
7701b8b8feSHarlanC     fn from(error: PackError) -> Self {
7801b8b8feSHarlanC         CacheError {
7901b8b8feSHarlanC             value: CacheErrorValue::PackError(error),
8001b8b8feSHarlanC         }
8101b8b8feSHarlanC     }
8201b8b8feSHarlanC }
8361bf3e1bSHarlanC 
8461bf3e1bSHarlanC #[derive(Debug, Fail)]
8561bf3e1bSHarlanC pub enum MetadataErrorValue {
8616394c08SHarlanC     #[fail(display = "metadata tag parse error\n")]
87abfa5883SHarlanC     DemuxerError(FlvDemuxerError),
88f8169385SHarlanC     #[fail(display = "pack error\n")]
8961bf3e1bSHarlanC     PackError(PackError),
90067fdd3cSHarlanC     #[fail(display = "amf write error\n")]
91067fdd3cSHarlanC     Amf0WriteError(Amf0WriteError),
9261bf3e1bSHarlanC }
93a4485a6eSHarlanC #[derive(Debug)]
9461bf3e1bSHarlanC pub struct MetadataError {
95067fdd3cSHarlanC     pub value: MetadataErrorValue,
96067fdd3cSHarlanC }
97067fdd3cSHarlanC 
98067fdd3cSHarlanC impl From<Amf0WriteError> for MetadataError {
99067fdd3cSHarlanC     fn from(error: Amf0WriteError) -> Self {
100067fdd3cSHarlanC         MetadataError {
101067fdd3cSHarlanC             value: MetadataErrorValue::Amf0WriteError(error),
102067fdd3cSHarlanC         }
103067fdd3cSHarlanC     }
10461bf3e1bSHarlanC }
1056685cacbSHarlanC 
1066685cacbSHarlanC impl Fail for MetadataError {
1076685cacbSHarlanC     fn cause(&self) -> Option<&dyn Fail> {
1086685cacbSHarlanC         self.value.cause()
1096685cacbSHarlanC     }
1106685cacbSHarlanC 
1116685cacbSHarlanC     fn backtrace(&self) -> Option<&Backtrace> {
1126685cacbSHarlanC         self.value.backtrace()
1136685cacbSHarlanC     }
1146685cacbSHarlanC }
1156685cacbSHarlanC 
1166685cacbSHarlanC impl fmt::Display for MetadataError {
1176685cacbSHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1186685cacbSHarlanC         fmt::Display::fmt(&self.value, f)
1196685cacbSHarlanC     }
1206685cacbSHarlanC }
121