1*a4ef5d6cSHarlanC use streamhub::errors::ChannelError; 2*a4ef5d6cSHarlanC 3a3d19cccSHarlanC use { 4a3d19cccSHarlanC failure::Fail, 5a3d19cccSHarlanC futures::channel::mpsc::SendError, 6a3d19cccSHarlanC rtmp::{ 7a3d19cccSHarlanC amf0::errors::Amf0WriteError, cache::errors::MetadataError, session::errors::SessionError, 8a3d19cccSHarlanC }, 9a3d19cccSHarlanC std::fmt, 10*a4ef5d6cSHarlanC tokio::sync::oneshot::error::RecvError, 11*a4ef5d6cSHarlanC xflv::errors::FlvMuxerError, 12a3d19cccSHarlanC }; 135377b641SHarlanC 140c504437SHarlanC #[derive(Debug)] 150c504437SHarlanC pub struct ServerError { 160c504437SHarlanC pub value: ServerErrorValue, 170c504437SHarlanC } 180c504437SHarlanC 190c504437SHarlanC #[derive(Debug, Fail)] 200c504437SHarlanC pub enum ServerErrorValue { 210c504437SHarlanC #[fail(display = "server error")] 220c504437SHarlanC Error, 230c504437SHarlanC } 240c504437SHarlanC 250c504437SHarlanC pub struct HttpFLvError { 260c504437SHarlanC pub value: HttpFLvErrorValue, 270c504437SHarlanC } 280c504437SHarlanC 290c504437SHarlanC #[derive(Debug, Fail)] 300c504437SHarlanC pub enum HttpFLvErrorValue { 310c504437SHarlanC #[fail(display = "server error")] 320c504437SHarlanC Error, 330c504437SHarlanC #[fail(display = "session error")] 340c504437SHarlanC SessionError(SessionError), 359eba8d65SHarlanC #[fail(display = "flv muxer error")] 3613bac29aSHarlan MuxerError(FlvMuxerError), 370c504437SHarlanC #[fail(display = "amf write error")] 38783195d9SHarlanC Amf0WriteError(Amf0WriteError), 39783195d9SHarlanC #[fail(display = "metadata error")] 40783195d9SHarlanC MetadataError(MetadataError), 41e05ab47bSHarlanC #[fail(display = "tokio mpsc error")] 4295a688c2SHarlanC MpscSendError(SendError), 43*a4ef5d6cSHarlanC #[fail(display = "event execute error: {}", _0)] 44*a4ef5d6cSHarlanC ChannelError(ChannelError), 45*a4ef5d6cSHarlanC #[fail(display = "tokio: oneshot receiver err: {}", _0)] 46*a4ef5d6cSHarlanC RecvError(#[cause] RecvError), 47*a4ef5d6cSHarlanC #[fail(display = "channel recv error")] 48*a4ef5d6cSHarlanC ChannelRecvError, 490c504437SHarlanC } 500c504437SHarlanC 510c504437SHarlanC impl From<SessionError> for HttpFLvError { from(error: SessionError) -> Self520c504437SHarlanC fn from(error: SessionError) -> Self { 530c504437SHarlanC HttpFLvError { 540c504437SHarlanC value: HttpFLvErrorValue::SessionError(error), 550c504437SHarlanC } 560c504437SHarlanC } 570c504437SHarlanC } 580c504437SHarlanC 5913bac29aSHarlan impl From<FlvMuxerError> for HttpFLvError { from(error: FlvMuxerError) -> Self6013bac29aSHarlan fn from(error: FlvMuxerError) -> Self { 610c504437SHarlanC HttpFLvError { 629eba8d65SHarlanC value: HttpFLvErrorValue::MuxerError(error), 630c504437SHarlanC } 640c504437SHarlanC } 650c504437SHarlanC } 660c504437SHarlanC 6795a688c2SHarlanC impl From<SendError> for HttpFLvError { from(error: SendError) -> Self6895a688c2SHarlanC fn from(error: SendError) -> Self { 69e05ab47bSHarlanC HttpFLvError { 70e05ab47bSHarlanC value: HttpFLvErrorValue::MpscSendError(error), 71e05ab47bSHarlanC } 72e05ab47bSHarlanC } 73e05ab47bSHarlanC } 74e05ab47bSHarlanC 750c504437SHarlanC impl From<Amf0WriteError> for HttpFLvError { from(error: Amf0WriteError) -> Self760c504437SHarlanC fn from(error: Amf0WriteError) -> Self { 770c504437SHarlanC HttpFLvError { 780c504437SHarlanC value: HttpFLvErrorValue::Amf0WriteError(error), 790c504437SHarlanC } 800c504437SHarlanC } 810c504437SHarlanC } 82783195d9SHarlanC 83783195d9SHarlanC impl From<MetadataError> for HttpFLvError { from(error: MetadataError) -> Self84783195d9SHarlanC fn from(error: MetadataError) -> Self { 85783195d9SHarlanC HttpFLvError { 86783195d9SHarlanC value: HttpFLvErrorValue::MetadataError(error), 87783195d9SHarlanC } 88783195d9SHarlanC } 89783195d9SHarlanC } 9095a688c2SHarlanC 91*a4ef5d6cSHarlanC impl From<ChannelError> for HttpFLvError { from(error: ChannelError) -> Self92*a4ef5d6cSHarlanC fn from(error: ChannelError) -> Self { 93*a4ef5d6cSHarlanC HttpFLvError { 94*a4ef5d6cSHarlanC value: HttpFLvErrorValue::ChannelError(error), 95*a4ef5d6cSHarlanC } 96*a4ef5d6cSHarlanC } 97*a4ef5d6cSHarlanC } 98*a4ef5d6cSHarlanC 99*a4ef5d6cSHarlanC impl From<RecvError> for HttpFLvError { from(error: RecvError) -> Self100*a4ef5d6cSHarlanC fn from(error: RecvError) -> Self { 101*a4ef5d6cSHarlanC HttpFLvError { 102*a4ef5d6cSHarlanC value: HttpFLvErrorValue::RecvError(error), 103*a4ef5d6cSHarlanC } 104*a4ef5d6cSHarlanC } 105*a4ef5d6cSHarlanC } 106*a4ef5d6cSHarlanC 10795a688c2SHarlanC impl fmt::Display for HttpFLvError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result10895a688c2SHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 10995a688c2SHarlanC fmt::Display::fmt(&self.value, f) 11095a688c2SHarlanC } 11195a688c2SHarlanC } 112