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