xref: /xiu/protocol/rtmp/src/chunk/errors.rs (revision 69de9bbd)
1 use {
2     failure::{Backtrace, Fail},
3     bytesio::bytes_errors::{BytesReadError, BytesWriteError},
4     std::fmt,
5 };
6 
7 #[derive(Debug, Fail)]
8 pub enum UnpackErrorValue {
9     #[fail(display = "bytes read error: {}", _0)]
10     BytesReadError(BytesReadError),
11     #[fail(display = "unknow read state")]
12     UnknowReadState,
13     #[fail(display = "empty chunks")]
14     EmptyChunks,
15     //IO(io::Error),
16 }
17 
18 #[derive(Debug)]
19 pub struct UnpackError {
20     pub value: UnpackErrorValue,
21 }
22 
23 impl From<UnpackErrorValue> for UnpackError {
24     fn from(val: UnpackErrorValue) -> Self {
25         UnpackError { value: val }
26     }
27 }
28 
29 impl From<BytesReadError> for UnpackError {
30     fn from(error: BytesReadError) -> Self {
31         UnpackError {
32             value: UnpackErrorValue::BytesReadError(error),
33         }
34     }
35 }
36 
37 #[derive(Debug, Fail)]
38 pub enum PackErrorValue {
39     #[fail(display = "not exist header")]
40     NotExistHeader,
41     #[fail(display = "unknow read state")]
42     UnknowReadState,
43     #[fail(display = "bytes writer error: {}", _0)]
44     BytesWriteError(BytesWriteError),
45 }
46 
47 #[derive(Debug)]
48 pub struct PackError {
49     pub value: PackErrorValue,
50 }
51 
52 impl From<PackErrorValue> for PackError {
53     fn from(val: PackErrorValue) -> Self {
54         PackError { value: val }
55     }
56 }
57 
58 impl From<BytesWriteError> for PackError {
59     fn from(error: BytesWriteError) -> Self {
60         PackError {
61             value: PackErrorValue::BytesWriteError(error),
62         }
63     }
64 }
65 
66 impl fmt::Display for PackError {
67     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
68         fmt::Display::fmt(&self.value, f)
69     }
70 }
71 
72 impl Fail for PackError {
73     fn cause(&self) -> Option<&dyn Fail> {
74         self.value.cause()
75     }
76 
77     fn backtrace(&self) -> Option<&Backtrace> {
78         self.value.backtrace()
79     }
80 }
81 
82 impl fmt::Display for UnpackError {
83     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
84         fmt::Display::fmt(&self.value, f)
85     }
86 }
87 
88 impl Fail for UnpackError {
89     fn cause(&self) -> Option<&dyn Fail> {
90         self.value.cause()
91     }
92 
93     fn backtrace(&self) -> Option<&Backtrace> {
94         self.value.backtrace()
95     }
96 }
97