1 use bytes::BytesMut; 2 use failure::Fail; 3 4 use libflv::errors::FlvDemuxerError; 5 use rtmp::session::errors::SessionError; 6 7 use networkio::bytes_errors::BytesWriteError; 8 use rtmp::amf0::errors::Amf0WriteError; 9 use rtmp::cache::errors::MetadataError; 10 use std::fmt; 11 // use tokio::sync::mpsc::error::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 HlsError { 25 pub value: HlsErrorValue, 26 } 27 28 #[derive(Debug, Fail)] 29 pub enum HlsErrorValue { 30 #[fail(display = "server error")] 31 Error, 32 #[fail(display = "session error")] 33 SessionError(SessionError), 34 35 #[fail(display = "amf write error")] 36 Amf0WriteError(Amf0WriteError), 37 #[fail(display = "metadata error")] 38 MetadataError(MetadataError), 39 #[fail(display = "flv demuxer error")] 40 FlvDemuxerError(FlvDemuxerError), 41 } 42 43 impl From<SessionError> for HlsError { 44 fn from(error: SessionError) -> Self { 45 HlsError { 46 value: HlsErrorValue::SessionError(error), 47 } 48 } 49 } 50 51 impl From<FlvDemuxerError> for HlsError { 52 fn from(error: FlvDemuxerError) -> Self { 53 HlsError { 54 value: HlsErrorValue::FlvDemuxerError(error), 55 } 56 } 57 } 58 59 impl From<Amf0WriteError> for HlsError { 60 fn from(error: Amf0WriteError) -> Self { 61 HlsError { 62 value: HlsErrorValue::Amf0WriteError(error), 63 } 64 } 65 } 66 67 impl From<MetadataError> for HlsError { 68 fn from(error: MetadataError) -> Self { 69 HlsError { 70 value: HlsErrorValue::MetadataError(error), 71 } 72 } 73 } 74 75 impl fmt::Display for HlsError { 76 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 77 fmt::Display::fmt(&self.value, f) 78 } 79 } 80