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