xref: /xiu/protocol/httpflv/src/errors.rs (revision dcd08966)
1 use {
2     failure::Fail,
3     futures::channel::mpsc::SendError,
4     xflv::errors::FlvMuxerError,
5     rtmp::{
6         amf0::errors::Amf0WriteError, cache::errors::MetadataError, session::errors::SessionError,
7     },
8     std::fmt,
9 };
10 
11 #[derive(Debug)]
12 pub struct ServerError {
13     pub value: ServerErrorValue,
14 }
15 
16 #[derive(Debug, Fail)]
17 pub enum ServerErrorValue {
18     #[fail(display = "server error")]
19     Error,
20 }
21 
22 pub struct HttpFLvError {
23     pub value: HttpFLvErrorValue,
24 }
25 
26 #[derive(Debug, Fail)]
27 pub enum HttpFLvErrorValue {
28     #[fail(display = "server error")]
29     Error,
30     #[fail(display = "session error")]
31     SessionError(SessionError),
32     #[fail(display = "flv muxer error")]
33     MuxerError(FlvMuxerError),
34     #[fail(display = "amf write error")]
35     Amf0WriteError(Amf0WriteError),
36     #[fail(display = "metadata error")]
37     MetadataError(MetadataError),
38     #[fail(display = "tokio mpsc error")]
39     MpscSendError(SendError),
40     #[fail(display = "receiver being dropped")]
41     ReceiverDroppedError(SendError),
42 }
43 
44 impl From<SessionError> for HttpFLvError {
45     fn from(error: SessionError) -> Self {
46         HttpFLvError {
47             value: HttpFLvErrorValue::SessionError(error),
48         }
49     }
50 }
51 
52 impl From<FlvMuxerError> for HttpFLvError {
53     fn from(error: FlvMuxerError) -> Self {
54         HttpFLvError {
55             value: HttpFLvErrorValue::MuxerError(error),
56         }
57     }
58 }
59 
60 impl From<SendError> for HttpFLvError {
61     fn from(error: SendError) -> Self {
62         HttpFLvError {
63             value: HttpFLvErrorValue::MpscSendError(error),
64         }
65     }
66 }
67 
68 impl From<Amf0WriteError> for HttpFLvError {
69     fn from(error: Amf0WriteError) -> Self {
70         HttpFLvError {
71             value: HttpFLvErrorValue::Amf0WriteError(error),
72         }
73     }
74 }
75 
76 impl From<MetadataError> for HttpFLvError {
77     fn from(error: MetadataError) -> Self {
78         HttpFLvError {
79             value: HttpFLvErrorValue::MetadataError(error),
80         }
81     }
82 }
83 
84 impl fmt::Display for HttpFLvError {
85     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
86         fmt::Display::fmt(&self.value, f)
87     }
88 }
89