1067fdd3cSHarlanC use { 2067fdd3cSHarlanC crate::{amf0::errors::Amf0WriteError, chunk::errors::PackError}, 3ccd9a1faSHarlan bytesio::bytes_errors::BytesReadError, 46685cacbSHarlanC failure::{Backtrace, Fail}, 57f3675feSHarlan h264_decoder::errors::H264Error, 6067fdd3cSHarlanC std::fmt, 706c50324SHarlan xflv::errors::{FlvDemuxerError, MpegAacError, Mpeg4AvcHevcError}, 8067fdd3cSHarlanC }; 901b8b8feSHarlanC 1001b8b8feSHarlanC #[derive(Debug, Fail)] 1101b8b8feSHarlanC pub enum CacheErrorValue { 12*69de9bbdSHarlanC #[fail(display = "cache tag parse error")] 13abfa5883SHarlanC DemuxerError(FlvDemuxerError), 14*69de9bbdSHarlanC #[fail(display = "mpeg aac error")] 15ccd9a1faSHarlan MpegAacError(MpegAacError), 16*69de9bbdSHarlanC #[fail(display = "mpeg avc error")] 1706c50324SHarlan MpegAvcError(Mpeg4AvcHevcError), 18*69de9bbdSHarlanC #[fail(display = "pack error")] 1901b8b8feSHarlanC PackError(PackError), 20*69de9bbdSHarlanC #[fail(display = "read bytes error")] 21ccd9a1faSHarlan BytesReadError(BytesReadError), 22*69de9bbdSHarlanC #[fail(display = "h264 error")] 23ccd9a1faSHarlan H264Error(H264Error), 2401b8b8feSHarlanC } 2501b8b8feSHarlanC 26a4485a6eSHarlanC impl fmt::Display for CacheError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result27a4485a6eSHarlanC 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 { from(error: FlvDemuxerError) -> Self37abfa5883SHarlanC fn from(error: FlvDemuxerError) -> Self { 3801b8b8feSHarlanC CacheError { 39abfa5883SHarlanC value: CacheErrorValue::DemuxerError(error), 4001b8b8feSHarlanC } 4101b8b8feSHarlanC } 4201b8b8feSHarlanC } 4301b8b8feSHarlanC 44ccd9a1faSHarlan impl From<H264Error> for CacheError { from(error: H264Error) -> Self45ccd9a1faSHarlan fn from(error: H264Error) -> Self { 46ccd9a1faSHarlan CacheError { 47ccd9a1faSHarlan value: CacheErrorValue::H264Error(error), 48ccd9a1faSHarlan } 49ccd9a1faSHarlan } 50ccd9a1faSHarlan } 51ccd9a1faSHarlan 52ccd9a1faSHarlan impl From<MpegAacError> for CacheError { from(error: MpegAacError) -> Self53ccd9a1faSHarlan fn from(error: MpegAacError) -> Self { 54ccd9a1faSHarlan CacheError { 55ccd9a1faSHarlan value: CacheErrorValue::MpegAacError(error), 56ccd9a1faSHarlan } 57ccd9a1faSHarlan } 58ccd9a1faSHarlan } 59ccd9a1faSHarlan 6006c50324SHarlan impl From<Mpeg4AvcHevcError> for CacheError { from(error: Mpeg4AvcHevcError) -> Self6106c50324SHarlan fn from(error: Mpeg4AvcHevcError) -> Self { 62ccd9a1faSHarlan CacheError { 63ccd9a1faSHarlan value: CacheErrorValue::MpegAvcError(error), 64ccd9a1faSHarlan } 65ccd9a1faSHarlan } 66ccd9a1faSHarlan } 67ccd9a1faSHarlan 68ccd9a1faSHarlan impl From<BytesReadError> for CacheError { from(error: BytesReadError) -> Self69ccd9a1faSHarlan fn from(error: BytesReadError) -> Self { 70ccd9a1faSHarlan CacheError { 71ccd9a1faSHarlan value: CacheErrorValue::BytesReadError(error), 72ccd9a1faSHarlan } 73ccd9a1faSHarlan } 74ccd9a1faSHarlan } 75ccd9a1faSHarlan 7601b8b8feSHarlanC impl From<PackError> for CacheError { from(error: PackError) -> Self7701b8b8feSHarlanC fn from(error: PackError) -> Self { 7801b8b8feSHarlanC CacheError { 7901b8b8feSHarlanC value: CacheErrorValue::PackError(error), 8001b8b8feSHarlanC } 8101b8b8feSHarlanC } 8201b8b8feSHarlanC } 8361bf3e1bSHarlanC 848e71d710SHarlan impl Fail for CacheError { cause(&self) -> Option<&dyn Fail>858e71d710SHarlan fn cause(&self) -> Option<&dyn Fail> { 868e71d710SHarlan self.value.cause() 878e71d710SHarlan } 888e71d710SHarlan backtrace(&self) -> Option<&Backtrace>898e71d710SHarlan fn backtrace(&self) -> Option<&Backtrace> { 908e71d710SHarlan self.value.backtrace() 918e71d710SHarlan } 928e71d710SHarlan } 938e71d710SHarlan 9461bf3e1bSHarlanC #[derive(Debug, Fail)] 9561bf3e1bSHarlanC pub enum MetadataErrorValue { 96*69de9bbdSHarlanC #[fail(display = "metadata tag parse error")] 97abfa5883SHarlanC DemuxerError(FlvDemuxerError), 98*69de9bbdSHarlanC #[fail(display = "pack error")] 9961bf3e1bSHarlanC PackError(PackError), 100*69de9bbdSHarlanC #[fail(display = "amf write error")] 101067fdd3cSHarlanC Amf0WriteError(Amf0WriteError), 10261bf3e1bSHarlanC } 103a4485a6eSHarlanC #[derive(Debug)] 10461bf3e1bSHarlanC pub struct MetadataError { 105067fdd3cSHarlanC pub value: MetadataErrorValue, 106067fdd3cSHarlanC } 107067fdd3cSHarlanC 108067fdd3cSHarlanC impl From<Amf0WriteError> for MetadataError { from(error: Amf0WriteError) -> Self109067fdd3cSHarlanC fn from(error: Amf0WriteError) -> Self { 110067fdd3cSHarlanC MetadataError { 111067fdd3cSHarlanC value: MetadataErrorValue::Amf0WriteError(error), 112067fdd3cSHarlanC } 113067fdd3cSHarlanC } 11461bf3e1bSHarlanC } 1156685cacbSHarlanC 1166685cacbSHarlanC impl Fail for MetadataError { cause(&self) -> Option<&dyn Fail>1176685cacbSHarlanC fn cause(&self) -> Option<&dyn Fail> { 1186685cacbSHarlanC self.value.cause() 1196685cacbSHarlanC } 1206685cacbSHarlanC backtrace(&self) -> Option<&Backtrace>1216685cacbSHarlanC fn backtrace(&self) -> Option<&Backtrace> { 1226685cacbSHarlanC self.value.backtrace() 1236685cacbSHarlanC } 1246685cacbSHarlanC } 1256685cacbSHarlanC 1266685cacbSHarlanC impl fmt::Display for MetadataError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result1276685cacbSHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 1286685cacbSHarlanC fmt::Display::fmt(&self.value, f) 1296685cacbSHarlanC } 1306685cacbSHarlanC } 131