1 use bytesio::bytes_errors::BytesReadError; 2 use bytesio::bytes_errors::BytesWriteError; 3 use failure::Backtrace; 4 5 use {failure::Fail, std::fmt}; 6 #[derive(Debug, Fail)] 7 pub enum ChannelErrorValue { 8 #[fail(display = "no app name")] 9 NoAppName, 10 #[fail(display = "no stream name")] 11 NoStreamName, 12 #[fail(display = "no app or stream name")] 13 NoAppOrStreamName, 14 #[fail(display = "exists")] 15 Exists, 16 #[fail(display = "send error")] 17 SendError, 18 #[fail(display = "send video error")] 19 SendVideoError, 20 #[fail(display = "send audio error")] 21 SendAudioError, 22 #[fail(display = "bytes read error")] 23 BytesReadError(BytesReadError), 24 #[fail(display = "bytes write error")] 25 BytesWriteError(BytesWriteError), 26 #[fail(display = "not correct data sender type")] 27 NotCorrectDataSenderType, 28 } 29 #[derive(Debug)] 30 pub struct ChannelError { 31 pub value: ChannelErrorValue, 32 } 33 34 impl fmt::Display for ChannelError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result35 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 36 fmt::Display::fmt(&self.value, f) 37 } 38 } 39 40 impl Fail for ChannelError { cause(&self) -> Option<&dyn Fail>41 fn cause(&self) -> Option<&dyn Fail> { 42 self.value.cause() 43 } 44 backtrace(&self) -> Option<&Backtrace>45 fn backtrace(&self) -> Option<&Backtrace> { 46 self.value.backtrace() 47 } 48 } 49 50 impl From<BytesReadError> for ChannelError { from(error: BytesReadError) -> Self51 fn from(error: BytesReadError) -> Self { 52 ChannelError { 53 value: ChannelErrorValue::BytesReadError(error), 54 } 55 } 56 } 57 58 impl From<BytesWriteError> for ChannelError { from(error: BytesWriteError) -> Self59 fn from(error: BytesWriteError) -> Self { 60 ChannelError { 61 value: ChannelErrorValue::BytesWriteError(error), 62 } 63 } 64 } 65 66 // impl From<CacheError> for ChannelError { 67 // fn from(error: CacheError) -> Self { 68 // ChannelError { 69 // value: ChannelErrorValue::CacheError(error), 70 // } 71 // } 72 // } 73