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 11 use libmpegts::errors::MpegTsError; 12 use std::fmt; 13 14 // use tokio::sync::mpsc::error::SendError; 15 16 #[derive(Debug)] 17 pub struct ServerError { 18 pub value: ServerErrorValue, 19 } 20 21 #[derive(Debug, Fail)] 22 pub enum ServerErrorValue { 23 #[fail(display = "server error")] 24 Error, 25 } 26 #[derive(Debug)] 27 pub struct MediaError { 28 pub value: MediaErrorValue, 29 } 30 31 #[derive(Debug, Fail)] 32 pub enum MediaErrorValue { 33 #[fail(display = "server error")] 34 Error, 35 #[fail(display = "session error")] 36 SessionError(SessionError), 37 #[fail(display = "amf write error")] 38 Amf0WriteError(Amf0WriteError), 39 #[fail(display = "metadata error")] 40 MetadataError(MetadataError), 41 #[fail(display = "flv demuxer error")] 42 FlvDemuxerError(FlvDemuxerError), 43 #[fail(display = "mpegts error")] 44 MpegTsError(MpegTsError), 45 46 #[fail(display = "write file error")] 47 IOError(std::io::Error), 48 } 49 50 impl From<SessionError> for MediaError { 51 fn from(error: SessionError) -> Self { 52 MediaError { 53 value: MediaErrorValue::SessionError(error), 54 } 55 } 56 } 57 58 impl From<FlvDemuxerError> for MediaError { 59 fn from(error: FlvDemuxerError) -> Self { 60 MediaError { 61 value: MediaErrorValue::FlvDemuxerError(error), 62 } 63 } 64 } 65 66 impl From<MpegTsError> for MediaError { 67 fn from(error: MpegTsError) -> Self { 68 MediaError { 69 value: MediaErrorValue::MpegTsError(error), 70 } 71 } 72 } 73 74 impl From<Amf0WriteError> for MediaError { 75 fn from(error: Amf0WriteError) -> Self { 76 MediaError { 77 value: MediaErrorValue::Amf0WriteError(error), 78 } 79 } 80 } 81 82 impl From<MetadataError> for MediaError { 83 fn from(error: MetadataError) -> Self { 84 MediaError { 85 value: MediaErrorValue::MetadataError(error), 86 } 87 } 88 } 89 90 impl From<std::io::Error> for MediaError { 91 fn from(error: std::io::Error) -> Self { 92 MediaError { 93 value: MediaErrorValue::IOError(error), 94 } 95 } 96 } 97 98 99 impl fmt::Display for MediaError { 100 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 101 fmt::Display::fmt(&self.value, f) 102 } 103 } 104 105 pub struct HlsError { 106 pub value: HlsErrorValue, 107 } 108 109 #[derive(Debug, Fail)] 110 pub enum HlsErrorValue { 111 #[fail(display = "server error")] 112 Error, 113 #[fail(display = "session error")] 114 SessionError(SessionError), 115 #[fail(display = "amf write error")] 116 Amf0WriteError(Amf0WriteError), 117 #[fail(display = "metadata error")] 118 MetadataError(MetadataError), 119 #[fail(display = "flv demuxer error")] 120 FlvDemuxerError(FlvDemuxerError), 121 #[fail(display = "media error")] 122 MediaError(MediaError), 123 } 124 125 impl From<MediaError> for HlsError { 126 fn from(error: MediaError) -> Self { 127 HlsError { 128 value: HlsErrorValue::MediaError(error), 129 } 130 } 131 } 132 133 impl From<SessionError> for HlsError { 134 fn from(error: SessionError) -> Self { 135 HlsError { 136 value: HlsErrorValue::SessionError(error), 137 } 138 } 139 } 140 141 impl From<FlvDemuxerError> for HlsError { 142 fn from(error: FlvDemuxerError) -> Self { 143 HlsError { 144 value: HlsErrorValue::FlvDemuxerError(error), 145 } 146 } 147 } 148 149 impl From<Amf0WriteError> for HlsError { 150 fn from(error: Amf0WriteError) -> Self { 151 HlsError { 152 value: HlsErrorValue::Amf0WriteError(error), 153 } 154 } 155 } 156 157 impl From<MetadataError> for HlsError { 158 fn from(error: MetadataError) -> Self { 159 HlsError { 160 value: HlsErrorValue::MetadataError(error), 161 } 162 } 163 } 164 165 impl fmt::Display for HlsError { 166 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 167 fmt::Display::fmt(&self.value, f) 168 } 169 } 170 // #[derive(Debug, Fail)] 171 // pub struct TsError { 172 // pub value: TsErrorValue, 173 // } 174 175 // impl fmt::Display for TsError { 176 // fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 177 // fmt::Display::fmt(&self.value, f) 178 // } 179 // } 180 181 // #[derive(Debug, Fail)] 182 // pub enum TsErrorValue { 183 // #[fail(display = "write file error")] 184 // IOError(std::io::Error), 185 // } 186 187 // impl From<std::io::Error> for TsError { 188 // fn from(error: std::io::Error) -> Self { 189 // TsError { 190 // value: TsErrorValue::IOError(error), 191 // } 192 // } 193 // } 194