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 tokio::sync::mpsc::error::SendError; 10 use futures::channel::mpsc::SendError; 11 12 #[derive(Debug)] 13 pub struct ServerError { 14 pub value: ServerErrorValue, 15 } 16 17 #[derive(Debug, Fail)] 18 pub enum ServerErrorValue { 19 #[fail(display = "server error")] 20 Error, 21 } 22 23 pub struct HttpFLvError { 24 pub value: HttpFLvErrorValue, 25 } 26 27 #[derive(Debug, Fail)] 28 pub enum HttpFLvErrorValue { 29 #[fail(display = "server error")] 30 Error, 31 #[fail(display = "session error")] 32 SessionError(SessionError), 33 #[fail(display = "bytes write error")] 34 BytesWriteError(BytesWriteError), 35 #[fail(display = "amf write error")] 36 Amf0WriteError(Amf0WriteError), 37 #[fail(display = "metadata error")] 38 MetadataError(MetadataError), 39 #[fail(display = "tokio mpsc error")] 40 MpscSendError(SendError), 41 } 42 43 impl From<SessionError> for HttpFLvError { 44 fn from(error: SessionError) -> Self { 45 HttpFLvError { 46 value: HttpFLvErrorValue::SessionError(error), 47 } 48 } 49 } 50 51 impl From<BytesWriteError> for HttpFLvError { 52 fn from(error: BytesWriteError) -> Self { 53 HttpFLvError { 54 value: HttpFLvErrorValue::BytesWriteError(error), 55 } 56 } 57 } 58 59 impl From<SendError> for HttpFLvError { 60 fn from(error: SendError) -> Self { 61 HttpFLvError { 62 value: HttpFLvErrorValue::MpscSendError(error), 63 } 64 } 65 } 66 67 impl From<Amf0WriteError> for HttpFLvError { 68 fn from(error: Amf0WriteError) -> Self { 69 HttpFLvError { 70 value: HttpFLvErrorValue::Amf0WriteError(error), 71 } 72 } 73 } 74 75 impl From<MetadataError> for HttpFLvError { 76 fn from(error: MetadataError) -> Self { 77 HttpFLvError { 78 value: HttpFLvErrorValue::MetadataError(error), 79 } 80 } 81 } 82 83 impl fmt::Display for HttpFLvError { 84 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 85 fmt::Display::fmt(&self.value, f) 86 } 87 } 88