xref: /xiu/protocol/rtmp/src/messages/errors.rs (revision 69de9bbd)
1e2687b83SHarlanC use {
2e2687b83SHarlanC     crate::{
3e2687b83SHarlanC         amf0::errors::Amf0ReadError,
4e2687b83SHarlanC         protocol_control_messages::errors::ProtocolControlMessageReaderError,
5e2687b83SHarlanC         user_control_messages::errors::EventMessagesError,
6e2687b83SHarlanC     },
7e2687b83SHarlanC     failure::{Backtrace, Fail},
888325f54SHarlanC     bytesio::bytes_errors::BytesReadError,
9e2687b83SHarlanC     std::fmt,
10e2687b83SHarlanC };
11c2f3fbfaSHarlanC 
12c2f3fbfaSHarlanC #[derive(Debug, Fail)]
13dd301212SHarlanC pub enum MessageErrorValue {
14*69de9bbdSHarlanC     #[fail(display = "bytes read error: {}", _0)]
154ff0d3acSHarlanC     BytesReadError(BytesReadError),
16c2f3fbfaSHarlanC     #[fail(display = "unknow read state")]
17dd301212SHarlanC     UnknowReadState,
18*69de9bbdSHarlanC     #[fail(display = "amf0 read error: {}", _0)]
19dd301212SHarlanC     Amf0ReadError(Amf0ReadError),
20c2f3fbfaSHarlanC     #[fail(display = "unknown message type")]
2178ae0aa7SHarlanC     UnknowMessageType,
22*69de9bbdSHarlanC     #[fail(display = "protocol control message read error: {}", _0)]
238a60cc5aSHarlanC     ProtocolControlMessageReaderError(ProtocolControlMessageReaderError),
24*69de9bbdSHarlanC     #[fail(display = "user control message read error: {}", _0)]
2597f0b5afSHarlanC     EventMessagesError(EventMessagesError),
26dd301212SHarlanC }
27dd301212SHarlanC 
28c2f3fbfaSHarlanC #[derive(Debug)]
29dd301212SHarlanC pub struct MessageError {
30dd301212SHarlanC     pub value: MessageErrorValue,
31dd301212SHarlanC }
32dd301212SHarlanC 
33dd301212SHarlanC impl From<MessageErrorValue> for MessageError {
from(val: MessageErrorValue) -> Self34dd301212SHarlanC     fn from(val: MessageErrorValue) -> Self {
35dd301212SHarlanC         MessageError { value: val }
36dd301212SHarlanC     }
37dd301212SHarlanC }
38dd301212SHarlanC 
394ff0d3acSHarlanC impl From<BytesReadError> for MessageError {
from(error: BytesReadError) -> Self404ff0d3acSHarlanC     fn from(error: BytesReadError) -> Self {
41dd301212SHarlanC         MessageError {
424ff0d3acSHarlanC             value: MessageErrorValue::BytesReadError(error),
43dd301212SHarlanC         }
44dd301212SHarlanC     }
45dd301212SHarlanC }
46dd301212SHarlanC 
47dd301212SHarlanC impl From<Amf0ReadError> for MessageError {
from(error: Amf0ReadError) -> Self48dd301212SHarlanC     fn from(error: Amf0ReadError) -> Self {
49dd301212SHarlanC         MessageError {
50dd301212SHarlanC             value: MessageErrorValue::Amf0ReadError(error),
51dd301212SHarlanC         }
52dd301212SHarlanC     }
53dd301212SHarlanC }
548a60cc5aSHarlanC 
558a60cc5aSHarlanC impl From<ProtocolControlMessageReaderError> for MessageError {
from(error: ProtocolControlMessageReaderError) -> Self568a60cc5aSHarlanC     fn from(error: ProtocolControlMessageReaderError) -> Self {
578a60cc5aSHarlanC         MessageError {
588a60cc5aSHarlanC             value: MessageErrorValue::ProtocolControlMessageReaderError(error),
598a60cc5aSHarlanC         }
608a60cc5aSHarlanC     }
618a60cc5aSHarlanC }
62c2f3fbfaSHarlanC 
6397f0b5afSHarlanC impl From<EventMessagesError> for MessageError {
from(error: EventMessagesError) -> Self6497f0b5afSHarlanC     fn from(error: EventMessagesError) -> Self {
6597f0b5afSHarlanC         MessageError {
6697f0b5afSHarlanC             value: MessageErrorValue::EventMessagesError(error),
6797f0b5afSHarlanC         }
6897f0b5afSHarlanC     }
6997f0b5afSHarlanC }
7097f0b5afSHarlanC 
71c2f3fbfaSHarlanC impl fmt::Display for MessageError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result72c2f3fbfaSHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
73c2f3fbfaSHarlanC         fmt::Display::fmt(&self.value, f)
74c2f3fbfaSHarlanC     }
75c2f3fbfaSHarlanC }
76c2f3fbfaSHarlanC 
77c2f3fbfaSHarlanC impl Fail for MessageError {
cause(&self) -> Option<&dyn Fail>78c2f3fbfaSHarlanC     fn cause(&self) -> Option<&dyn Fail> {
79c2f3fbfaSHarlanC         self.value.cause()
80c2f3fbfaSHarlanC     }
81c2f3fbfaSHarlanC 
backtrace(&self) -> Option<&Backtrace>82c2f3fbfaSHarlanC     fn backtrace(&self) -> Option<&Backtrace> {
83c2f3fbfaSHarlanC         self.value.backtrace()
84c2f3fbfaSHarlanC     }
85c2f3fbfaSHarlanC }
86