xref: /xiu/protocol/rtmp/src/messages/errors.rs (revision 383722b2)
1 use crate::amf0::errors::Amf0ReadError;
2 use crate::protocol_control_messages::errors::ProtocolControlMessageReaderError;
3 use crate::user_control_messages::errors::EventMessagesError;
4 use netio::bytes_errors::BytesReadError;
5 
6 use failure::{Backtrace, Fail};
7 use std::fmt;
8 
9 #[derive(Debug, Fail)]
10 pub enum MessageErrorValue {
11     #[fail(display = "bytes read error: {}", _0)]
12     BytesReadError(BytesReadError),
13     #[fail(display = "unknow read state")]
14     UnknowReadState,
15     #[fail(display = "amf0 read error: {}", _0)]
16     Amf0ReadError(Amf0ReadError),
17     #[fail(display = "unknown message type")]
18     UnknowMessageType,
19     #[fail(display = "protocol control message read error: {}", _0)]
20     ProtocolControlMessageReaderError(ProtocolControlMessageReaderError),
21     #[fail(display = "user control message read error: {}", _0)]
22     EventMessagesError(EventMessagesError),
23 }
24 
25 #[derive(Debug)]
26 pub struct MessageError {
27     pub value: MessageErrorValue,
28 }
29 
30 impl From<MessageErrorValue> for MessageError {
31     fn from(val: MessageErrorValue) -> Self {
32         MessageError { value: val }
33     }
34 }
35 
36 impl From<BytesReadError> for MessageError {
37     fn from(error: BytesReadError) -> Self {
38         MessageError {
39             value: MessageErrorValue::BytesReadError(error),
40         }
41     }
42 }
43 
44 impl From<Amf0ReadError> for MessageError {
45     fn from(error: Amf0ReadError) -> Self {
46         MessageError {
47             value: MessageErrorValue::Amf0ReadError(error),
48         }
49     }
50 }
51 
52 impl From<ProtocolControlMessageReaderError> for MessageError {
53     fn from(error: ProtocolControlMessageReaderError) -> Self {
54         MessageError {
55             value: MessageErrorValue::ProtocolControlMessageReaderError(error),
56         }
57     }
58 }
59 
60 impl From<EventMessagesError> for MessageError {
61     fn from(error: EventMessagesError) -> Self {
62         MessageError {
63             value: MessageErrorValue::EventMessagesError(error),
64         }
65     }
66 }
67 
68 impl fmt::Display for MessageError {
69     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
70         fmt::Display::fmt(&self.value, f)
71     }
72 }
73 
74 impl Fail for MessageError {
75     fn cause(&self) -> Option<&dyn Fail> {
76         self.value.cause()
77     }
78 
79     fn backtrace(&self) -> Option<&Backtrace> {
80         self.value.backtrace()
81     }
82 }
83