1 use bytes::BytesMut; 2 use failure::Fail; 3 use rtmp::session::errors::SessionError; 4 5 use networkio::bytes_errors::BytesWriteError; 6 use rtmp::amf0::errors::Amf0WriteError; 7 use rtmp::cache::errors::MetadataError; 8 use std::fmt; 9 use libflv::errors::MuxerError; 10 // use tokio::sync::mpsc::error::SendError; 11 use futures::channel::mpsc::SendError; 12 13 #[derive(Debug)] 14 pub struct ServerError { 15 pub value: ServerErrorValue, 16 } 17 18 #[derive(Debug, Fail)] 19 pub enum ServerErrorValue { 20 #[fail(display = "server error")] 21 Error, 22 } 23 24 pub struct HttpFLvError { 25 pub value: HttpFLvErrorValue, 26 } 27 28 #[derive(Debug, Fail)] 29 pub enum HttpFLvErrorValue { 30 #[fail(display = "server error")] 31 Error, 32 #[fail(display = "session error")] 33 SessionError(SessionError), 34 #[fail(display = "flv muxer error")] 35 MuxerError(MuxerError), 36 #[fail(display = "amf write error")] 37 Amf0WriteError(Amf0WriteError), 38 #[fail(display = "metadata error")] 39 MetadataError(MetadataError), 40 #[fail(display = "tokio mpsc error")] 41 MpscSendError(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<MuxerError> for HttpFLvError { 53 fn from(error: MuxerError) -> 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