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 #[derive(Debug)] 24 pub struct MediaError { 25 pub value: MediaErrorValue, 26 } 27 28 #[derive(Debug, Fail)] 29 pub enum MediaErrorValue { 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 MediaError { 44 fn from(error: SessionError) -> Self { 45 MediaError { 46 value: MediaErrorValue::SessionError(error), 47 } 48 } 49 } 50 51 impl From<FlvDemuxerError> for MediaError { 52 fn from(error: FlvDemuxerError) -> Self { 53 MediaError { 54 value: MediaErrorValue::FlvDemuxerError(error), 55 } 56 } 57 } 58 59 impl From<Amf0WriteError> for MediaError { 60 fn from(error: Amf0WriteError) -> Self { 61 MediaError { 62 value: MediaErrorValue::Amf0WriteError(error), 63 } 64 } 65 } 66 67 impl From<MetadataError> for MediaError { 68 fn from(error: MetadataError) -> Self { 69 MediaError { 70 value: MediaErrorValue::MetadataError(error), 71 } 72 } 73 } 74 75 impl fmt::Display for MediaError { 76 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 77 fmt::Display::fmt(&self.value, f) 78 } 79 } 80 81 pub struct HlsError { 82 pub value: HlsErrorValue, 83 } 84 85 #[derive(Debug, Fail)] 86 pub enum HlsErrorValue { 87 #[fail(display = "server error")] 88 Error, 89 #[fail(display = "session error")] 90 SessionError(SessionError), 91 92 #[fail(display = "amf write error")] 93 Amf0WriteError(Amf0WriteError), 94 #[fail(display = "metadata error")] 95 MetadataError(MetadataError), 96 #[fail(display = "flv demuxer error")] 97 FlvDemuxerError(FlvDemuxerError), 98 #[fail(display = "media error")] 99 MediaError(MediaError), 100 } 101 102 impl From<MediaError> for HlsError { 103 fn from(error: MediaError) -> Self { 104 HlsError { 105 value: HlsErrorValue::MediaError(error), 106 } 107 } 108 } 109 110 impl From<SessionError> for HlsError { 111 fn from(error: SessionError) -> Self { 112 HlsError { 113 value: HlsErrorValue::SessionError(error), 114 } 115 } 116 } 117 118 impl From<FlvDemuxerError> for HlsError { 119 fn from(error: FlvDemuxerError) -> Self { 120 HlsError { 121 value: HlsErrorValue::FlvDemuxerError(error), 122 } 123 } 124 } 125 126 impl From<Amf0WriteError> for HlsError { 127 fn from(error: Amf0WriteError) -> Self { 128 HlsError { 129 value: HlsErrorValue::Amf0WriteError(error), 130 } 131 } 132 } 133 134 impl From<MetadataError> for HlsError { 135 fn from(error: MetadataError) -> Self { 136 HlsError { 137 value: HlsErrorValue::MetadataError(error), 138 } 139 } 140 } 141 142 impl fmt::Display for HlsError { 143 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 144 fmt::Display::fmt(&self.value, f) 145 } 146 } 147