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