135844cc6SHarlanC use crate::amf0::errors::Amf0WriteError; 2069ff577SHarlanC 3*c2f3fbfaSHarlanC use failure::{Backtrace, Fail}; 4*c2f3fbfaSHarlanC use std::fmt; 5*c2f3fbfaSHarlanC 6*c2f3fbfaSHarlanC #[derive(Debug)] 7069ff577SHarlanC pub struct NetStreamError { 8069ff577SHarlanC pub value: NetStreamErrorValue, 9069ff577SHarlanC } 10069ff577SHarlanC 11*c2f3fbfaSHarlanC #[derive(Debug, Fail)] 12069ff577SHarlanC pub enum NetStreamErrorValue { 13*c2f3fbfaSHarlanC #[fail(display = "amf0 write error: {}", _0)] 14069ff577SHarlanC Amf0WriteError(Amf0WriteError), 15*c2f3fbfaSHarlanC #[fail(display = "invalid max chunk size")] 16069ff577SHarlanC InvalidMaxChunkSize { chunk_size: usize }, 17069ff577SHarlanC } 18069ff577SHarlanC 19069ff577SHarlanC impl From<Amf0WriteError> for NetStreamError { 20069ff577SHarlanC fn from(error: Amf0WriteError) -> Self { 21069ff577SHarlanC NetStreamError { 22069ff577SHarlanC value: NetStreamErrorValue::Amf0WriteError(error), 23069ff577SHarlanC } 24069ff577SHarlanC } 25069ff577SHarlanC } 26*c2f3fbfaSHarlanC 27*c2f3fbfaSHarlanC impl fmt::Display for NetStreamError { 28*c2f3fbfaSHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 29*c2f3fbfaSHarlanC fmt::Display::fmt(&self.value, f) 30*c2f3fbfaSHarlanC } 31*c2f3fbfaSHarlanC } 32*c2f3fbfaSHarlanC 33*c2f3fbfaSHarlanC impl Fail for NetStreamError { 34*c2f3fbfaSHarlanC fn cause(&self) -> Option<&dyn Fail> { 35*c2f3fbfaSHarlanC self.value.cause() 36*c2f3fbfaSHarlanC } 37*c2f3fbfaSHarlanC 38*c2f3fbfaSHarlanC fn backtrace(&self) -> Option<&Backtrace> { 39*c2f3fbfaSHarlanC self.value.backtrace() 40*c2f3fbfaSHarlanC } 41*c2f3fbfaSHarlanC } 42