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