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