xref: /xiu/protocol/httpflv/src/errors.rs (revision b36cf5da)
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 }
41 
42 impl From<SessionError> for HttpFLvError {
43     fn from(error: SessionError) -> Self {
44         HttpFLvError {
45             value: HttpFLvErrorValue::SessionError(error),
46         }
47     }
48 }
49 
50 impl From<FlvMuxerError> for HttpFLvError {
51     fn from(error: FlvMuxerError) -> Self {
52         HttpFLvError {
53             value: HttpFLvErrorValue::MuxerError(error),
54         }
55     }
56 }
57 
58 impl From<SendError> for HttpFLvError {
59     fn from(error: SendError) -> Self {
60         HttpFLvError {
61             value: HttpFLvErrorValue::MpscSendError(error),
62         }
63     }
64 }
65 
66 impl From<Amf0WriteError> for HttpFLvError {
67     fn from(error: Amf0WriteError) -> Self {
68         HttpFLvError {
69             value: HttpFLvErrorValue::Amf0WriteError(error),
70         }
71     }
72 }
73 
74 impl From<MetadataError> for HttpFLvError {
75     fn from(error: MetadataError) -> Self {
76         HttpFLvError {
77             value: HttpFLvErrorValue::MetadataError(error),
78         }
79     }
80 }
81 
82 impl fmt::Display for HttpFLvError {
83     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
84         fmt::Display::fmt(&self.value, f)
85     }
86 }
87