xref: /xiu/protocol/rtmp/src/chunk/errors.rs (revision a4ef5d6c)
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     #[fail(display = "cannot parse")]
17     CannotParse,
18 }
19 
20 #[derive(Debug)]
21 pub struct UnpackError {
22     pub value: UnpackErrorValue,
23 }
24 
25 impl From<UnpackErrorValue> for UnpackError {
from(val: UnpackErrorValue) -> Self26     fn from(val: UnpackErrorValue) -> Self {
27         UnpackError { value: val }
28     }
29 }
30 
31 impl From<BytesReadError> for UnpackError {
from(error: BytesReadError) -> Self32     fn from(error: BytesReadError) -> Self {
33         UnpackError {
34             value: UnpackErrorValue::BytesReadError(error),
35         }
36     }
37 }
38 
39 #[derive(Debug, Fail)]
40 pub enum PackErrorValue {
41     #[fail(display = "not exist header")]
42     NotExistHeader,
43     #[fail(display = "unknow read state")]
44     UnknowReadState,
45     #[fail(display = "bytes writer error: {}", _0)]
46     BytesWriteError(BytesWriteError),
47 }
48 
49 #[derive(Debug)]
50 pub struct PackError {
51     pub value: PackErrorValue,
52 }
53 
54 impl From<PackErrorValue> for PackError {
from(val: PackErrorValue) -> Self55     fn from(val: PackErrorValue) -> Self {
56         PackError { value: val }
57     }
58 }
59 
60 impl From<BytesWriteError> for PackError {
from(error: BytesWriteError) -> Self61     fn from(error: BytesWriteError) -> Self {
62         PackError {
63             value: PackErrorValue::BytesWriteError(error),
64         }
65     }
66 }
67 
68 impl fmt::Display for PackError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result69     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
70         fmt::Display::fmt(&self.value, f)
71     }
72 }
73 
74 impl Fail for PackError {
cause(&self) -> Option<&dyn Fail>75     fn cause(&self) -> Option<&dyn Fail> {
76         self.value.cause()
77     }
78 
backtrace(&self) -> Option<&Backtrace>79     fn backtrace(&self) -> Option<&Backtrace> {
80         self.value.backtrace()
81     }
82 }
83 
84 impl fmt::Display for UnpackError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result85     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
86         fmt::Display::fmt(&self.value, f)
87     }
88 }
89 
90 impl Fail for UnpackError {
cause(&self) -> Option<&dyn Fail>91     fn cause(&self) -> Option<&dyn Fail> {
92         self.value.cause()
93     }
94 
backtrace(&self) -> Option<&Backtrace>95     fn backtrace(&self) -> Option<&Backtrace> {
96         self.value.backtrace()
97     }
98 }
99