xref: /xiu/protocol/rtmp/src/amf0/errors.rs (revision 69de9bbd)
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