1 use { 2 crate::{amf0::errors::Amf0WriteError, chunk::errors::PackError}, 3 failure::{Backtrace, Fail}, 4 std::fmt, 5 }; 6 7 #[derive(Debug)] 8 pub struct NetStreamError { 9 pub value: NetStreamErrorValue, 10 } 11 12 #[derive(Debug, Fail)] 13 pub enum NetStreamErrorValue { 14 #[fail(display = "amf0 write error: {}", _0)] 15 Amf0WriteError(Amf0WriteError), 16 #[fail(display = "invalid max chunk size")] 17 InvalidMaxChunkSize { chunk_size: usize }, 18 #[fail(display = "pack error")] 19 PackError(PackError), 20 } 21 22 impl From<Amf0WriteError> for NetStreamError { from(error: Amf0WriteError) -> Self23 fn from(error: Amf0WriteError) -> Self { 24 NetStreamError { 25 value: NetStreamErrorValue::Amf0WriteError(error), 26 } 27 } 28 } 29 30 impl From<PackError> for NetStreamError { from(error: PackError) -> Self31 fn from(error: PackError) -> Self { 32 NetStreamError { 33 value: NetStreamErrorValue::PackError(error), 34 } 35 } 36 } 37 38 impl fmt::Display for NetStreamError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result39 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 40 fmt::Display::fmt(&self.value, f) 41 } 42 } 43 44 impl Fail for NetStreamError { cause(&self) -> Option<&dyn Fail>45 fn cause(&self) -> Option<&dyn Fail> { 46 self.value.cause() 47 } 48 backtrace(&self) -> Option<&Backtrace>49 fn backtrace(&self) -> Option<&Backtrace> { 50 self.value.backtrace() 51 } 52 } 53