1e2687b83SHarlanC use { 288325f54SHarlanC bytesio::bytes_errors::{BytesReadError, BytesWriteError}, 36685cacbSHarlanC failure::{Backtrace, Fail}, 4e2687b83SHarlanC std::{ 5e2687b83SHarlanC fmt, {io, string}, 6e2687b83SHarlanC }, 7e2687b83SHarlanC }; 8c2f3fbfaSHarlanC 9c2f3fbfaSHarlanC #[derive(Debug, Fail)] 10e1aaa799SHarlanC pub enum Amf0ReadErrorValue { 11*69de9bbdSHarlanC #[fail(display = "Encountered unknown marker: {}", marker)] 12e1aaa799SHarlanC UnknownMarker { marker: u8 }, 13*69de9bbdSHarlanC #[fail(display = "parser string error: {}", _0)] 14c2f3fbfaSHarlanC StringParseError(#[cause] string::FromUtf8Error), 15*69de9bbdSHarlanC #[fail(display = "bytes read error :{}", _0)] 164ff0d3acSHarlanC BytesReadError(BytesReadError), 17c2f3fbfaSHarlanC #[fail(display = "wrong type")] 1878ae0aa7SHarlanC WrongType, 19e1aaa799SHarlanC } 20e1aaa799SHarlanC 21c2f3fbfaSHarlanC #[derive(Debug)] 22e1aaa799SHarlanC pub struct Amf0ReadError { 23e1aaa799SHarlanC pub value: Amf0ReadErrorValue, 24e1aaa799SHarlanC } 25e1aaa799SHarlanC 26e1aaa799SHarlanC impl From<string::FromUtf8Error> for Amf0ReadError { from(error: string::FromUtf8Error) -> Self27e1aaa799SHarlanC fn from(error: string::FromUtf8Error) -> Self { 28e1aaa799SHarlanC Amf0ReadError { 29e1aaa799SHarlanC value: Amf0ReadErrorValue::StringParseError(error), 30e1aaa799SHarlanC } 31e1aaa799SHarlanC } 32e1aaa799SHarlanC } 33e1aaa799SHarlanC 344ff0d3acSHarlanC impl From<BytesReadError> for Amf0ReadError { from(error: BytesReadError) -> Self354ff0d3acSHarlanC fn from(error: BytesReadError) -> Self { 36e1aaa799SHarlanC Amf0ReadError { 374ff0d3acSHarlanC value: Amf0ReadErrorValue::BytesReadError(error), 38e1aaa799SHarlanC } 39e1aaa799SHarlanC } 40e1aaa799SHarlanC } 41e1aaa799SHarlanC 42c2f3fbfaSHarlanC #[derive(Debug, Fail)] 43e1aaa799SHarlanC pub enum Amf0WriteErrorValue { 44c2f3fbfaSHarlanC #[fail(display = "normal string too long")] 45e1aaa799SHarlanC NormalStringTooLong, 46*69de9bbdSHarlanC #[fail(display = "io error")] 47e1aaa799SHarlanC BufferWriteError(io::Error), 48*69de9bbdSHarlanC #[fail(display = "bytes write error")] 494ff0d3acSHarlanC BytesWriteError(BytesWriteError), 50e1aaa799SHarlanC } 51e1aaa799SHarlanC 52c2f3fbfaSHarlanC #[derive(Debug)] 53e1aaa799SHarlanC pub struct Amf0WriteError { 54e1aaa799SHarlanC pub value: Amf0WriteErrorValue, 55e1aaa799SHarlanC } 56e1aaa799SHarlanC 57e1aaa799SHarlanC impl From<io::Error> for Amf0WriteError { from(error: io::Error) -> Self58e1aaa799SHarlanC fn from(error: io::Error) -> Self { 59e1aaa799SHarlanC Amf0WriteError { 60e1aaa799SHarlanC value: Amf0WriteErrorValue::BufferWriteError(error), 61e1aaa799SHarlanC } 62e1aaa799SHarlanC } 63e1aaa799SHarlanC } 64e1aaa799SHarlanC 654ff0d3acSHarlanC impl From<BytesWriteError> for Amf0WriteError { from(error: BytesWriteError) -> Self664ff0d3acSHarlanC fn from(error: BytesWriteError) -> Self { 67e1aaa799SHarlanC Amf0WriteError { 684ff0d3acSHarlanC value: Amf0WriteErrorValue::BytesWriteError(error), 69e1aaa799SHarlanC } 70e1aaa799SHarlanC } 71e1aaa799SHarlanC } 72c2f3fbfaSHarlanC 73c2f3fbfaSHarlanC impl fmt::Display for Amf0ReadError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result74c2f3fbfaSHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 75c2f3fbfaSHarlanC fmt::Display::fmt(&self.value, f) 76c2f3fbfaSHarlanC } 77c2f3fbfaSHarlanC } 78c2f3fbfaSHarlanC 79c2f3fbfaSHarlanC impl Fail for Amf0ReadError { cause(&self) -> Option<&dyn Fail>80c2f3fbfaSHarlanC fn cause(&self) -> Option<&dyn Fail> { 81c2f3fbfaSHarlanC self.value.cause() 82c2f3fbfaSHarlanC } 83c2f3fbfaSHarlanC backtrace(&self) -> Option<&Backtrace>84c2f3fbfaSHarlanC fn backtrace(&self) -> Option<&Backtrace> { 85c2f3fbfaSHarlanC self.value.backtrace() 86c2f3fbfaSHarlanC } 87c2f3fbfaSHarlanC } 88c2f3fbfaSHarlanC 89c2f3fbfaSHarlanC impl fmt::Display for Amf0WriteError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result90c2f3fbfaSHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 91c2f3fbfaSHarlanC fmt::Display::fmt(&self.value, f) 92c2f3fbfaSHarlanC } 93c2f3fbfaSHarlanC } 94c2f3fbfaSHarlanC 95c2f3fbfaSHarlanC impl Fail for Amf0WriteError { cause(&self) -> Option<&dyn Fail>96c2f3fbfaSHarlanC fn cause(&self) -> Option<&dyn Fail> { 97c2f3fbfaSHarlanC self.value.cause() 98c2f3fbfaSHarlanC } 99c2f3fbfaSHarlanC backtrace(&self) -> Option<&Backtrace>100c2f3fbfaSHarlanC fn backtrace(&self) -> Option<&Backtrace> { 101c2f3fbfaSHarlanC self.value.backtrace() 102c2f3fbfaSHarlanC } 103c2f3fbfaSHarlanC } 104