xref: /xiu/protocol/httpflv/src/errors.rs (revision a4ef5d6c)
1*a4ef5d6cSHarlanC use streamhub::errors::ChannelError;
2*a4ef5d6cSHarlanC 
3a3d19cccSHarlanC use {
4a3d19cccSHarlanC     failure::Fail,
5a3d19cccSHarlanC     futures::channel::mpsc::SendError,
6a3d19cccSHarlanC     rtmp::{
7a3d19cccSHarlanC         amf0::errors::Amf0WriteError, cache::errors::MetadataError, session::errors::SessionError,
8a3d19cccSHarlanC     },
9a3d19cccSHarlanC     std::fmt,
10*a4ef5d6cSHarlanC     tokio::sync::oneshot::error::RecvError,
11*a4ef5d6cSHarlanC     xflv::errors::FlvMuxerError,
12a3d19cccSHarlanC };
135377b641SHarlanC 
140c504437SHarlanC #[derive(Debug)]
150c504437SHarlanC pub struct ServerError {
160c504437SHarlanC     pub value: ServerErrorValue,
170c504437SHarlanC }
180c504437SHarlanC 
190c504437SHarlanC #[derive(Debug, Fail)]
200c504437SHarlanC pub enum ServerErrorValue {
210c504437SHarlanC     #[fail(display = "server error")]
220c504437SHarlanC     Error,
230c504437SHarlanC }
240c504437SHarlanC 
250c504437SHarlanC pub struct HttpFLvError {
260c504437SHarlanC     pub value: HttpFLvErrorValue,
270c504437SHarlanC }
280c504437SHarlanC 
290c504437SHarlanC #[derive(Debug, Fail)]
300c504437SHarlanC pub enum HttpFLvErrorValue {
310c504437SHarlanC     #[fail(display = "server error")]
320c504437SHarlanC     Error,
330c504437SHarlanC     #[fail(display = "session error")]
340c504437SHarlanC     SessionError(SessionError),
359eba8d65SHarlanC     #[fail(display = "flv muxer error")]
3613bac29aSHarlan     MuxerError(FlvMuxerError),
370c504437SHarlanC     #[fail(display = "amf write error")]
38783195d9SHarlanC     Amf0WriteError(Amf0WriteError),
39783195d9SHarlanC     #[fail(display = "metadata error")]
40783195d9SHarlanC     MetadataError(MetadataError),
41e05ab47bSHarlanC     #[fail(display = "tokio mpsc error")]
4295a688c2SHarlanC     MpscSendError(SendError),
43*a4ef5d6cSHarlanC     #[fail(display = "event execute error: {}", _0)]
44*a4ef5d6cSHarlanC     ChannelError(ChannelError),
45*a4ef5d6cSHarlanC     #[fail(display = "tokio: oneshot receiver err: {}", _0)]
46*a4ef5d6cSHarlanC     RecvError(#[cause] RecvError),
47*a4ef5d6cSHarlanC     #[fail(display = "channel recv error")]
48*a4ef5d6cSHarlanC     ChannelRecvError,
490c504437SHarlanC }
500c504437SHarlanC 
510c504437SHarlanC impl From<SessionError> for HttpFLvError {
from(error: SessionError) -> Self520c504437SHarlanC     fn from(error: SessionError) -> Self {
530c504437SHarlanC         HttpFLvError {
540c504437SHarlanC             value: HttpFLvErrorValue::SessionError(error),
550c504437SHarlanC         }
560c504437SHarlanC     }
570c504437SHarlanC }
580c504437SHarlanC 
5913bac29aSHarlan impl From<FlvMuxerError> for HttpFLvError {
from(error: FlvMuxerError) -> Self6013bac29aSHarlan     fn from(error: FlvMuxerError) -> Self {
610c504437SHarlanC         HttpFLvError {
629eba8d65SHarlanC             value: HttpFLvErrorValue::MuxerError(error),
630c504437SHarlanC         }
640c504437SHarlanC     }
650c504437SHarlanC }
660c504437SHarlanC 
6795a688c2SHarlanC impl From<SendError> for HttpFLvError {
from(error: SendError) -> Self6895a688c2SHarlanC     fn from(error: SendError) -> Self {
69e05ab47bSHarlanC         HttpFLvError {
70e05ab47bSHarlanC             value: HttpFLvErrorValue::MpscSendError(error),
71e05ab47bSHarlanC         }
72e05ab47bSHarlanC     }
73e05ab47bSHarlanC }
74e05ab47bSHarlanC 
750c504437SHarlanC impl From<Amf0WriteError> for HttpFLvError {
from(error: Amf0WriteError) -> Self760c504437SHarlanC     fn from(error: Amf0WriteError) -> Self {
770c504437SHarlanC         HttpFLvError {
780c504437SHarlanC             value: HttpFLvErrorValue::Amf0WriteError(error),
790c504437SHarlanC         }
800c504437SHarlanC     }
810c504437SHarlanC }
82783195d9SHarlanC 
83783195d9SHarlanC impl From<MetadataError> for HttpFLvError {
from(error: MetadataError) -> Self84783195d9SHarlanC     fn from(error: MetadataError) -> Self {
85783195d9SHarlanC         HttpFLvError {
86783195d9SHarlanC             value: HttpFLvErrorValue::MetadataError(error),
87783195d9SHarlanC         }
88783195d9SHarlanC     }
89783195d9SHarlanC }
9095a688c2SHarlanC 
91*a4ef5d6cSHarlanC impl From<ChannelError> for HttpFLvError {
from(error: ChannelError) -> Self92*a4ef5d6cSHarlanC     fn from(error: ChannelError) -> Self {
93*a4ef5d6cSHarlanC         HttpFLvError {
94*a4ef5d6cSHarlanC             value: HttpFLvErrorValue::ChannelError(error),
95*a4ef5d6cSHarlanC         }
96*a4ef5d6cSHarlanC     }
97*a4ef5d6cSHarlanC }
98*a4ef5d6cSHarlanC 
99*a4ef5d6cSHarlanC impl From<RecvError> for HttpFLvError {
from(error: RecvError) -> Self100*a4ef5d6cSHarlanC     fn from(error: RecvError) -> Self {
101*a4ef5d6cSHarlanC         HttpFLvError {
102*a4ef5d6cSHarlanC             value: HttpFLvErrorValue::RecvError(error),
103*a4ef5d6cSHarlanC         }
104*a4ef5d6cSHarlanC     }
105*a4ef5d6cSHarlanC }
106*a4ef5d6cSHarlanC 
10795a688c2SHarlanC impl fmt::Display for HttpFLvError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result10895a688c2SHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
10995a688c2SHarlanC         fmt::Display::fmt(&self.value, f)
11095a688c2SHarlanC     }
11195a688c2SHarlanC }
112