1e05ab47bSHarlanC use bytes::BytesMut; 25377b641SHarlanC use failure::Fail; 30c504437SHarlanC use rtmp::session::errors::SessionError; 45377b641SHarlanC 50c504437SHarlanC use networkio::bytes_errors::BytesWriteError; 60c504437SHarlanC use rtmp::amf0::errors::Amf0WriteError; 7783195d9SHarlanC use rtmp::cache::errors::MetadataError; 895a688c2SHarlanC use std::fmt; 9*9eba8d65SHarlanC use libflv::errors::MuxerError; 1095a688c2SHarlanC // use tokio::sync::mpsc::error::SendError; 1195a688c2SHarlanC use futures::channel::mpsc::SendError; 125377b641SHarlanC 130c504437SHarlanC #[derive(Debug)] 140c504437SHarlanC pub struct ServerError { 150c504437SHarlanC pub value: ServerErrorValue, 160c504437SHarlanC } 170c504437SHarlanC 180c504437SHarlanC #[derive(Debug, Fail)] 190c504437SHarlanC pub enum ServerErrorValue { 200c504437SHarlanC #[fail(display = "server error")] 210c504437SHarlanC Error, 220c504437SHarlanC } 230c504437SHarlanC 240c504437SHarlanC pub struct HttpFLvError { 250c504437SHarlanC pub value: HttpFLvErrorValue, 260c504437SHarlanC } 270c504437SHarlanC 280c504437SHarlanC #[derive(Debug, Fail)] 290c504437SHarlanC pub enum HttpFLvErrorValue { 300c504437SHarlanC #[fail(display = "server error")] 310c504437SHarlanC Error, 320c504437SHarlanC #[fail(display = "session error")] 330c504437SHarlanC SessionError(SessionError), 34*9eba8d65SHarlanC #[fail(display = "flv muxer error")] 35*9eba8d65SHarlanC MuxerError(MuxerError), 360c504437SHarlanC #[fail(display = "amf write error")] 37783195d9SHarlanC Amf0WriteError(Amf0WriteError), 38783195d9SHarlanC #[fail(display = "metadata error")] 39783195d9SHarlanC MetadataError(MetadataError), 40e05ab47bSHarlanC #[fail(display = "tokio mpsc error")] 4195a688c2SHarlanC MpscSendError(SendError), 420c504437SHarlanC } 430c504437SHarlanC 440c504437SHarlanC impl From<SessionError> for HttpFLvError { 450c504437SHarlanC fn from(error: SessionError) -> Self { 460c504437SHarlanC HttpFLvError { 470c504437SHarlanC value: HttpFLvErrorValue::SessionError(error), 480c504437SHarlanC } 490c504437SHarlanC } 500c504437SHarlanC } 510c504437SHarlanC 52*9eba8d65SHarlanC impl From<MuxerError> for HttpFLvError { 53*9eba8d65SHarlanC fn from(error: MuxerError) -> Self { 540c504437SHarlanC HttpFLvError { 55*9eba8d65SHarlanC value: HttpFLvErrorValue::MuxerError(error), 560c504437SHarlanC } 570c504437SHarlanC } 580c504437SHarlanC } 590c504437SHarlanC 6095a688c2SHarlanC impl From<SendError> for HttpFLvError { 6195a688c2SHarlanC fn from(error: SendError) -> Self { 62e05ab47bSHarlanC HttpFLvError { 63e05ab47bSHarlanC value: HttpFLvErrorValue::MpscSendError(error), 64e05ab47bSHarlanC } 65e05ab47bSHarlanC } 66e05ab47bSHarlanC } 67e05ab47bSHarlanC 680c504437SHarlanC impl From<Amf0WriteError> for HttpFLvError { 690c504437SHarlanC fn from(error: Amf0WriteError) -> Self { 700c504437SHarlanC HttpFLvError { 710c504437SHarlanC value: HttpFLvErrorValue::Amf0WriteError(error), 720c504437SHarlanC } 730c504437SHarlanC } 740c504437SHarlanC } 75783195d9SHarlanC 76783195d9SHarlanC impl From<MetadataError> for HttpFLvError { 77783195d9SHarlanC fn from(error: MetadataError) -> Self { 78783195d9SHarlanC HttpFLvError { 79783195d9SHarlanC value: HttpFLvErrorValue::MetadataError(error), 80783195d9SHarlanC } 81783195d9SHarlanC } 82783195d9SHarlanC } 8395a688c2SHarlanC 8495a688c2SHarlanC impl fmt::Display for HttpFLvError { 8595a688c2SHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 8695a688c2SHarlanC fmt::Display::fmt(&self.value, f) 8795a688c2SHarlanC } 8895a688c2SHarlanC } 89