1 use { 2 crate::{amf0::errors::Amf0WriteError, chunk::errors::PackError}, 3 bytesio::bytes_errors::BytesReadError, 4 failure::{Backtrace, Fail}, 5 h264::errors::H264Error, 6 std::fmt, 7 xflv::errors::{FlvDemuxerError, MpegAacError, MpegAvcError}, 8 }; 9 10 #[derive(Debug, Fail)] 11 pub enum CacheErrorValue { 12 #[fail(display = "cache tag parse error\n")] 13 DemuxerError(FlvDemuxerError), 14 #[fail(display = "mpeg aac error\n")] 15 MpegAacError(MpegAacError), 16 #[fail(display = "mpeg avc error\n")] 17 MpegAvcError(MpegAvcError), 18 #[fail(display = "pack error\n")] 19 PackError(PackError), 20 #[fail(display = "read bytes error\n")] 21 BytesReadError(BytesReadError), 22 #[fail(display = "h264 error\n")] 23 H264Error(H264Error), 24 } 25 26 impl fmt::Display for CacheError { 27 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 28 fmt::Display::fmt(&self.value, f) 29 } 30 } 31 #[derive(Debug)] 32 pub struct CacheError { 33 pub value: CacheErrorValue, 34 } 35 36 impl From<FlvDemuxerError> for CacheError { 37 fn from(error: FlvDemuxerError) -> Self { 38 CacheError { 39 value: CacheErrorValue::DemuxerError(error), 40 } 41 } 42 } 43 44 impl From<H264Error> for CacheError { 45 fn from(error: H264Error) -> Self { 46 CacheError { 47 value: CacheErrorValue::H264Error(error), 48 } 49 } 50 } 51 52 impl From<MpegAacError> for CacheError { 53 fn from(error: MpegAacError) -> Self { 54 CacheError { 55 value: CacheErrorValue::MpegAacError(error), 56 } 57 } 58 } 59 60 impl From<MpegAvcError> for CacheError { 61 fn from(error: MpegAvcError) -> Self { 62 CacheError { 63 value: CacheErrorValue::MpegAvcError(error), 64 } 65 } 66 } 67 68 impl From<BytesReadError> for CacheError { 69 fn from(error: BytesReadError) -> Self { 70 CacheError { 71 value: CacheErrorValue::BytesReadError(error), 72 } 73 } 74 } 75 76 impl From<PackError> for CacheError { 77 fn from(error: PackError) -> Self { 78 CacheError { 79 value: CacheErrorValue::PackError(error), 80 } 81 } 82 } 83 84 #[derive(Debug, Fail)] 85 pub enum MetadataErrorValue { 86 #[fail(display = "metadata tag parse error\n")] 87 DemuxerError(FlvDemuxerError), 88 #[fail(display = "pack error\n")] 89 PackError(PackError), 90 #[fail(display = "amf write error\n")] 91 Amf0WriteError(Amf0WriteError), 92 } 93 #[derive(Debug)] 94 pub struct MetadataError { 95 pub value: MetadataErrorValue, 96 } 97 98 impl From<Amf0WriteError> for MetadataError { 99 fn from(error: Amf0WriteError) -> Self { 100 MetadataError { 101 value: MetadataErrorValue::Amf0WriteError(error), 102 } 103 } 104 } 105 106 impl Fail for MetadataError { 107 fn cause(&self) -> Option<&dyn Fail> { 108 self.value.cause() 109 } 110 111 fn backtrace(&self) -> Option<&Backtrace> { 112 self.value.backtrace() 113 } 114 } 115 116 impl fmt::Display for MetadataError { 117 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 118 fmt::Display::fmt(&self.value, f) 119 } 120 } 121