xref: /xiu/protocol/rtmp/src/chunk/errors.rs (revision a4ef5d6c)
1e2687b83SHarlanC use {
2e2687b83SHarlanC     failure::{Backtrace, Fail},
388325f54SHarlanC     bytesio::bytes_errors::{BytesReadError, BytesWriteError},
4e2687b83SHarlanC     std::fmt,
5e2687b83SHarlanC };
6c2f3fbfaSHarlanC 
7c2f3fbfaSHarlanC #[derive(Debug, Fail)]
8e1aaa799SHarlanC pub enum UnpackErrorValue {
969de9bbdSHarlanC     #[fail(display = "bytes read error: {}", _0)]
104ff0d3acSHarlanC     BytesReadError(BytesReadError),
11c2f3fbfaSHarlanC     #[fail(display = "unknow read state")]
12e1aaa799SHarlanC     UnknowReadState,
134745db95SHarlanC     #[fail(display = "empty chunks")]
144745db95SHarlanC     EmptyChunks,
15e1aaa799SHarlanC     //IO(io::Error),
16*a4ef5d6cSHarlanC     #[fail(display = "cannot parse")]
17*a4ef5d6cSHarlanC     CannotParse,
18e1aaa799SHarlanC }
19e1aaa799SHarlanC 
20c2f3fbfaSHarlanC #[derive(Debug)]
21e1aaa799SHarlanC pub struct UnpackError {
22e1aaa799SHarlanC     pub value: UnpackErrorValue,
23e1aaa799SHarlanC }
24e1aaa799SHarlanC 
25e1aaa799SHarlanC impl From<UnpackErrorValue> for UnpackError {
from(val: UnpackErrorValue) -> Self26e1aaa799SHarlanC     fn from(val: UnpackErrorValue) -> Self {
27e1aaa799SHarlanC         UnpackError { value: val }
28e1aaa799SHarlanC     }
29e1aaa799SHarlanC }
30e1aaa799SHarlanC 
314ff0d3acSHarlanC impl From<BytesReadError> for UnpackError {
from(error: BytesReadError) -> Self324ff0d3acSHarlanC     fn from(error: BytesReadError) -> Self {
33e1aaa799SHarlanC         UnpackError {
344ff0d3acSHarlanC             value: UnpackErrorValue::BytesReadError(error),
35e1aaa799SHarlanC         }
36e1aaa799SHarlanC     }
37e1aaa799SHarlanC }
3863d2eb43SHarlanC 
39c2f3fbfaSHarlanC #[derive(Debug, Fail)]
4063d2eb43SHarlanC pub enum PackErrorValue {
41c2f3fbfaSHarlanC     #[fail(display = "not exist header")]
4263d2eb43SHarlanC     NotExistHeader,
43c2f3fbfaSHarlanC     #[fail(display = "unknow read state")]
4463d2eb43SHarlanC     UnknowReadState,
4569de9bbdSHarlanC     #[fail(display = "bytes writer error: {}", _0)]
4663d2eb43SHarlanC     BytesWriteError(BytesWriteError),
4763d2eb43SHarlanC }
4863d2eb43SHarlanC 
49c2f3fbfaSHarlanC #[derive(Debug)]
5063d2eb43SHarlanC pub struct PackError {
5163d2eb43SHarlanC     pub value: PackErrorValue,
5263d2eb43SHarlanC }
5363d2eb43SHarlanC 
5463d2eb43SHarlanC impl From<PackErrorValue> for PackError {
from(val: PackErrorValue) -> Self5563d2eb43SHarlanC     fn from(val: PackErrorValue) -> Self {
5663d2eb43SHarlanC         PackError { value: val }
5763d2eb43SHarlanC     }
5863d2eb43SHarlanC }
5963d2eb43SHarlanC 
6063d2eb43SHarlanC impl From<BytesWriteError> for PackError {
from(error: BytesWriteError) -> Self6163d2eb43SHarlanC     fn from(error: BytesWriteError) -> Self {
6263d2eb43SHarlanC         PackError {
6363d2eb43SHarlanC             value: PackErrorValue::BytesWriteError(error),
6463d2eb43SHarlanC         }
6563d2eb43SHarlanC     }
6663d2eb43SHarlanC }
67c2f3fbfaSHarlanC 
68c2f3fbfaSHarlanC impl fmt::Display for PackError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result69c2f3fbfaSHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
70c2f3fbfaSHarlanC         fmt::Display::fmt(&self.value, f)
71c2f3fbfaSHarlanC     }
72c2f3fbfaSHarlanC }
73c2f3fbfaSHarlanC 
74c2f3fbfaSHarlanC impl Fail for PackError {
cause(&self) -> Option<&dyn Fail>75c2f3fbfaSHarlanC     fn cause(&self) -> Option<&dyn Fail> {
76c2f3fbfaSHarlanC         self.value.cause()
77c2f3fbfaSHarlanC     }
78c2f3fbfaSHarlanC 
backtrace(&self) -> Option<&Backtrace>79c2f3fbfaSHarlanC     fn backtrace(&self) -> Option<&Backtrace> {
80c2f3fbfaSHarlanC         self.value.backtrace()
81c2f3fbfaSHarlanC     }
82c2f3fbfaSHarlanC }
83c2f3fbfaSHarlanC 
84c2f3fbfaSHarlanC impl fmt::Display for UnpackError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result85c2f3fbfaSHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
86c2f3fbfaSHarlanC         fmt::Display::fmt(&self.value, f)
87c2f3fbfaSHarlanC     }
88c2f3fbfaSHarlanC }
89c2f3fbfaSHarlanC 
90c2f3fbfaSHarlanC impl Fail for UnpackError {
cause(&self) -> Option<&dyn Fail>91c2f3fbfaSHarlanC     fn cause(&self) -> Option<&dyn Fail> {
92c2f3fbfaSHarlanC         self.value.cause()
93c2f3fbfaSHarlanC     }
94c2f3fbfaSHarlanC 
backtrace(&self) -> Option<&Backtrace>95c2f3fbfaSHarlanC     fn backtrace(&self) -> Option<&Backtrace> {
96c2f3fbfaSHarlanC         self.value.backtrace()
97c2f3fbfaSHarlanC     }
98c2f3fbfaSHarlanC }
99