xref: /xiu/protocol/rtmp/src/handshake/errors.rs (revision 69de9bbd)
1e2687b83SHarlanC use {
288325f54SHarlanC     bytesio::bytes_errors::{BytesReadError, BytesWriteError},
3a4440553SHarlanC     failure::{Backtrace, Fail},
4f9029ceaSHarlanC     std::{fmt, io::Error, time::SystemTimeError},
5e2687b83SHarlanC };
6c2f3fbfaSHarlanC 
7c2f3fbfaSHarlanC #[derive(Debug, Fail)]
8ff1f1192SHarlanC pub enum HandshakeErrorValue {
9*69de9bbdSHarlanC     #[fail(display = "bytes read error: {}", _0)]
10ff1f1192SHarlanC     BytesReadError(BytesReadError),
11*69de9bbdSHarlanC     #[fail(display = "bytes write error: {}", _0)]
12ff1f1192SHarlanC     BytesWriteError(BytesWriteError),
13*69de9bbdSHarlanC     #[fail(display = "system time error: {}", _0)]
14ff1f1192SHarlanC     SysTimeError(SystemTimeError),
15*69de9bbdSHarlanC     #[fail(display = "digest error: {}", _0)]
16a4440553SHarlanC     DigestError(DigestError),
17*69de9bbdSHarlanC     #[fail(display = "Digest not found error")]
18ff1f1192SHarlanC     DigestNotFound,
19*69de9bbdSHarlanC     #[fail(display = "s0 version not correct error")]
20ff1f1192SHarlanC     S0VersionNotCorrect,
21*69de9bbdSHarlanC     #[fail(display = "io error")]
22f9029ceaSHarlanC     IOError(Error),
23f9029ceaSHarlanC }
24f9029ceaSHarlanC 
25f9029ceaSHarlanC impl From<Error> for HandshakeError {
from(error: Error) -> Self26f9029ceaSHarlanC     fn from(error: Error) -> Self {
27f9029ceaSHarlanC         HandshakeError {
28f9029ceaSHarlanC             value: HandshakeErrorValue::IOError(error),
29f9029ceaSHarlanC         }
30f9029ceaSHarlanC     }
31ff1f1192SHarlanC }
32ff1f1192SHarlanC 
33c2f3fbfaSHarlanC #[derive(Debug)]
34ff1f1192SHarlanC pub struct HandshakeError {
35ff1f1192SHarlanC     pub value: HandshakeErrorValue,
36ff1f1192SHarlanC }
37ff1f1192SHarlanC 
38ff1f1192SHarlanC impl From<HandshakeErrorValue> for HandshakeError {
from(val: HandshakeErrorValue) -> Self39ff1f1192SHarlanC     fn from(val: HandshakeErrorValue) -> Self {
40ff1f1192SHarlanC         HandshakeError { value: val }
41ff1f1192SHarlanC     }
42ff1f1192SHarlanC }
43ff1f1192SHarlanC 
44ff1f1192SHarlanC impl From<BytesReadError> for HandshakeError {
from(error: BytesReadError) -> Self45ff1f1192SHarlanC     fn from(error: BytesReadError) -> Self {
46ff1f1192SHarlanC         HandshakeError {
47ff1f1192SHarlanC             value: HandshakeErrorValue::BytesReadError(error),
48ff1f1192SHarlanC         }
49ff1f1192SHarlanC     }
50ff1f1192SHarlanC }
51ff1f1192SHarlanC 
52ff1f1192SHarlanC impl From<BytesWriteError> for HandshakeError {
from(error: BytesWriteError) -> Self53ff1f1192SHarlanC     fn from(error: BytesWriteError) -> Self {
54ff1f1192SHarlanC         HandshakeError {
55ff1f1192SHarlanC             value: HandshakeErrorValue::BytesWriteError(error),
56ff1f1192SHarlanC         }
57ff1f1192SHarlanC     }
58ff1f1192SHarlanC }
59ff1f1192SHarlanC 
60ff1f1192SHarlanC impl From<SystemTimeError> for HandshakeError {
from(error: SystemTimeError) -> Self61ff1f1192SHarlanC     fn from(error: SystemTimeError) -> Self {
62ff1f1192SHarlanC         HandshakeError {
63ff1f1192SHarlanC             value: HandshakeErrorValue::SysTimeError(error),
64ff1f1192SHarlanC         }
65ff1f1192SHarlanC     }
66ff1f1192SHarlanC }
67c2f3fbfaSHarlanC 
68a4440553SHarlanC impl From<DigestError> for HandshakeError {
from(error: DigestError) -> Self69a4440553SHarlanC     fn from(error: DigestError) -> Self {
70a4440553SHarlanC         HandshakeError {
71a4440553SHarlanC             value: HandshakeErrorValue::DigestError(error),
72a4440553SHarlanC         }
73a4440553SHarlanC     }
74a4440553SHarlanC }
75a4440553SHarlanC 
76c2f3fbfaSHarlanC impl fmt::Display for HandshakeError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result77c2f3fbfaSHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
78c2f3fbfaSHarlanC         fmt::Display::fmt(&self.value, f)
79c2f3fbfaSHarlanC     }
80c2f3fbfaSHarlanC }
81c2f3fbfaSHarlanC 
82c2f3fbfaSHarlanC impl Fail for HandshakeError {
cause(&self) -> Option<&dyn Fail>83c2f3fbfaSHarlanC     fn cause(&self) -> Option<&dyn Fail> {
84c2f3fbfaSHarlanC         self.value.cause()
85c2f3fbfaSHarlanC     }
86c2f3fbfaSHarlanC 
backtrace(&self) -> Option<&Backtrace>87c2f3fbfaSHarlanC     fn backtrace(&self) -> Option<&Backtrace> {
88c2f3fbfaSHarlanC         self.value.backtrace()
89c2f3fbfaSHarlanC     }
90c2f3fbfaSHarlanC }
91a4440553SHarlanC 
92a4440553SHarlanC #[derive(Debug)]
93a4440553SHarlanC pub struct DigestError {
94a4440553SHarlanC     pub value: DigestErrorValue,
95a4440553SHarlanC }
96a4440553SHarlanC 
97a4440553SHarlanC #[derive(Debug, Fail)]
98a4440553SHarlanC pub enum DigestErrorValue {
99*69de9bbdSHarlanC     #[fail(display = "bytes read error: {}", _0)]
100a4440553SHarlanC     BytesReadError(BytesReadError),
101*69de9bbdSHarlanC     #[fail(display = "digest length not correct")]
102a4440553SHarlanC     DigestLengthNotCorrect,
103*69de9bbdSHarlanC     #[fail(display = "cannot generate digest")]
104a4440553SHarlanC     CannotGenerate,
105*69de9bbdSHarlanC     #[fail(display = "unknow schema")]
106a4440553SHarlanC     UnknowSchema,
107a4440553SHarlanC }
108a4440553SHarlanC 
109a4440553SHarlanC impl From<BytesReadError> for DigestError {
from(error: BytesReadError) -> Self110a4440553SHarlanC     fn from(error: BytesReadError) -> Self {
111a4440553SHarlanC         DigestError {
112a4440553SHarlanC             value: DigestErrorValue::BytesReadError(error),
113a4440553SHarlanC         }
114a4440553SHarlanC     }
115a4440553SHarlanC }
116a4440553SHarlanC 
117a4440553SHarlanC impl fmt::Display for DigestError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result118a4440553SHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
119a4440553SHarlanC         fmt::Display::fmt(&self.value, f)
120a4440553SHarlanC     }
121a4440553SHarlanC }
122a4440553SHarlanC 
123a4440553SHarlanC impl Fail for DigestError {
cause(&self) -> Option<&dyn Fail>124a4440553SHarlanC     fn cause(&self) -> Option<&dyn Fail> {
125a4440553SHarlanC         self.value.cause()
126a4440553SHarlanC     }
127a4440553SHarlanC 
backtrace(&self) -> Option<&Backtrace>128a4440553SHarlanC     fn backtrace(&self) -> Option<&Backtrace> {
129a4440553SHarlanC         self.value.backtrace()
130a4440553SHarlanC     }
131a4440553SHarlanC }
132