xref: /xiu/protocol/httpflv/src/errors.rs (revision 9eba8d65)
1e05ab47bSHarlanC use bytes::BytesMut;
25377b641SHarlanC use failure::Fail;
30c504437SHarlanC use rtmp::session::errors::SessionError;
45377b641SHarlanC 
50c504437SHarlanC use networkio::bytes_errors::BytesWriteError;
60c504437SHarlanC use rtmp::amf0::errors::Amf0WriteError;
7783195d9SHarlanC use rtmp::cache::errors::MetadataError;
895a688c2SHarlanC use std::fmt;
9*9eba8d65SHarlanC use libflv::errors::MuxerError;
1095a688c2SHarlanC // use tokio::sync::mpsc::error::SendError;
1195a688c2SHarlanC use futures::channel::mpsc::SendError;
125377b641SHarlanC 
130c504437SHarlanC #[derive(Debug)]
140c504437SHarlanC pub struct ServerError {
150c504437SHarlanC     pub value: ServerErrorValue,
160c504437SHarlanC }
170c504437SHarlanC 
180c504437SHarlanC #[derive(Debug, Fail)]
190c504437SHarlanC pub enum ServerErrorValue {
200c504437SHarlanC     #[fail(display = "server error")]
210c504437SHarlanC     Error,
220c504437SHarlanC }
230c504437SHarlanC 
240c504437SHarlanC pub struct HttpFLvError {
250c504437SHarlanC     pub value: HttpFLvErrorValue,
260c504437SHarlanC }
270c504437SHarlanC 
280c504437SHarlanC #[derive(Debug, Fail)]
290c504437SHarlanC pub enum HttpFLvErrorValue {
300c504437SHarlanC     #[fail(display = "server error")]
310c504437SHarlanC     Error,
320c504437SHarlanC     #[fail(display = "session error")]
330c504437SHarlanC     SessionError(SessionError),
34*9eba8d65SHarlanC     #[fail(display = "flv muxer error")]
35*9eba8d65SHarlanC     MuxerError(MuxerError),
360c504437SHarlanC     #[fail(display = "amf write error")]
37783195d9SHarlanC     Amf0WriteError(Amf0WriteError),
38783195d9SHarlanC     #[fail(display = "metadata error")]
39783195d9SHarlanC     MetadataError(MetadataError),
40e05ab47bSHarlanC     #[fail(display = "tokio mpsc error")]
4195a688c2SHarlanC     MpscSendError(SendError),
420c504437SHarlanC }
430c504437SHarlanC 
440c504437SHarlanC impl From<SessionError> for HttpFLvError {
450c504437SHarlanC     fn from(error: SessionError) -> Self {
460c504437SHarlanC         HttpFLvError {
470c504437SHarlanC             value: HttpFLvErrorValue::SessionError(error),
480c504437SHarlanC         }
490c504437SHarlanC     }
500c504437SHarlanC }
510c504437SHarlanC 
52*9eba8d65SHarlanC impl From<MuxerError> for HttpFLvError {
53*9eba8d65SHarlanC     fn from(error: MuxerError) -> Self {
540c504437SHarlanC         HttpFLvError {
55*9eba8d65SHarlanC             value: HttpFLvErrorValue::MuxerError(error),
560c504437SHarlanC         }
570c504437SHarlanC     }
580c504437SHarlanC }
590c504437SHarlanC 
6095a688c2SHarlanC impl From<SendError> for HttpFLvError {
6195a688c2SHarlanC     fn from(error: SendError) -> Self {
62e05ab47bSHarlanC         HttpFLvError {
63e05ab47bSHarlanC             value: HttpFLvErrorValue::MpscSendError(error),
64e05ab47bSHarlanC         }
65e05ab47bSHarlanC     }
66e05ab47bSHarlanC }
67e05ab47bSHarlanC 
680c504437SHarlanC impl From<Amf0WriteError> for HttpFLvError {
690c504437SHarlanC     fn from(error: Amf0WriteError) -> Self {
700c504437SHarlanC         HttpFLvError {
710c504437SHarlanC             value: HttpFLvErrorValue::Amf0WriteError(error),
720c504437SHarlanC         }
730c504437SHarlanC     }
740c504437SHarlanC }
75783195d9SHarlanC 
76783195d9SHarlanC impl From<MetadataError> for HttpFLvError {
77783195d9SHarlanC     fn from(error: MetadataError) -> Self {
78783195d9SHarlanC         HttpFLvError {
79783195d9SHarlanC             value: HttpFLvErrorValue::MetadataError(error),
80783195d9SHarlanC         }
81783195d9SHarlanC     }
82783195d9SHarlanC }
8395a688c2SHarlanC 
8495a688c2SHarlanC impl fmt::Display for HttpFLvError {
8595a688c2SHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
8695a688c2SHarlanC         fmt::Display::fmt(&self.value, f)
8795a688c2SHarlanC     }
8895a688c2SHarlanC }
89