145abfa1fSHarlanC use { 245abfa1fSHarlanC crate::{amf0::errors::Amf0WriteError, chunk::errors::PackError}, 345abfa1fSHarlanC failure::{Backtrace, Fail}, 445abfa1fSHarlanC std::fmt, 545abfa1fSHarlanC }; 6c2f3fbfaSHarlanC 7c2f3fbfaSHarlanC #[derive(Debug)] 8069ff577SHarlanC pub struct NetStreamError { 9069ff577SHarlanC pub value: NetStreamErrorValue, 10069ff577SHarlanC } 11069ff577SHarlanC 12c2f3fbfaSHarlanC #[derive(Debug, Fail)] 13069ff577SHarlanC pub enum NetStreamErrorValue { 14*69de9bbdSHarlanC #[fail(display = "amf0 write error: {}", _0)] 15069ff577SHarlanC Amf0WriteError(Amf0WriteError), 16c2f3fbfaSHarlanC #[fail(display = "invalid max chunk size")] 17069ff577SHarlanC InvalidMaxChunkSize { chunk_size: usize }, 18*69de9bbdSHarlanC #[fail(display = "pack error")] 19383722b2SHarlanC PackError(PackError), 20069ff577SHarlanC } 21069ff577SHarlanC 22069ff577SHarlanC impl From<Amf0WriteError> for NetStreamError { from(error: Amf0WriteError) -> Self23069ff577SHarlanC fn from(error: Amf0WriteError) -> Self { 24069ff577SHarlanC NetStreamError { 25069ff577SHarlanC value: NetStreamErrorValue::Amf0WriteError(error), 26069ff577SHarlanC } 27069ff577SHarlanC } 28069ff577SHarlanC } 29c2f3fbfaSHarlanC 30383722b2SHarlanC impl From<PackError> for NetStreamError { from(error: PackError) -> Self31383722b2SHarlanC fn from(error: PackError) -> Self { 32383722b2SHarlanC NetStreamError { 33383722b2SHarlanC value: NetStreamErrorValue::PackError(error), 34383722b2SHarlanC } 35383722b2SHarlanC } 36383722b2SHarlanC } 37383722b2SHarlanC 38c2f3fbfaSHarlanC impl fmt::Display for NetStreamError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result39c2f3fbfaSHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 40c2f3fbfaSHarlanC fmt::Display::fmt(&self.value, f) 41c2f3fbfaSHarlanC } 42c2f3fbfaSHarlanC } 43c2f3fbfaSHarlanC 44c2f3fbfaSHarlanC impl Fail for NetStreamError { cause(&self) -> Option<&dyn Fail>45c2f3fbfaSHarlanC fn cause(&self) -> Option<&dyn Fail> { 46c2f3fbfaSHarlanC self.value.cause() 47c2f3fbfaSHarlanC } 48c2f3fbfaSHarlanC backtrace(&self) -> Option<&Backtrace>49c2f3fbfaSHarlanC fn backtrace(&self) -> Option<&Backtrace> { 50c2f3fbfaSHarlanC self.value.backtrace() 51c2f3fbfaSHarlanC } 52c2f3fbfaSHarlanC } 53