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