1*a4ef5d6cSHarlanC use streamhub::errors::ChannelError; 280f20d70SHarlanC use { 380f20d70SHarlanC bytesio::bytes_errors::BytesReadError, 480f20d70SHarlanC bytesio::{bytes_errors::BytesWriteError, bytesio_errors::BytesIOError}, 580f20d70SHarlanC failure::{Backtrace, Fail}, 680f20d70SHarlanC std::fmt, 780f20d70SHarlanC std::str::Utf8Error, 8*a4ef5d6cSHarlanC tokio::sync::oneshot::error::RecvError, 980f20d70SHarlanC webrtc::error::Error as RTCError, 1080f20d70SHarlanC }; 1180f20d70SHarlanC 1280f20d70SHarlanC #[derive(Debug)] 1380f20d70SHarlanC pub struct SessionError { 1480f20d70SHarlanC pub value: SessionErrorValue, 1580f20d70SHarlanC } 1680f20d70SHarlanC 1780f20d70SHarlanC #[derive(Debug, Fail)] 1880f20d70SHarlanC pub enum SessionErrorValue { 1969de9bbdSHarlanC #[fail(display = "net io error: {}", _0)] 2080f20d70SHarlanC BytesIOError(#[cause] BytesIOError), 2169de9bbdSHarlanC #[fail(display = "bytes read error: {}", _0)] 2280f20d70SHarlanC BytesReadError(#[cause] BytesReadError), 2369de9bbdSHarlanC #[fail(display = "bytes write error: {}", _0)] 2480f20d70SHarlanC BytesWriteError(#[cause] BytesWriteError), 2569de9bbdSHarlanC #[fail(display = "Utf8Error: {}", _0)] 2680f20d70SHarlanC Utf8Error(#[cause] Utf8Error), 27*a4ef5d6cSHarlanC #[fail(display = "event execute error: {}", _0)] 28*a4ef5d6cSHarlanC ChannelError(#[cause] ChannelError), 2969de9bbdSHarlanC #[fail(display = "webrtc error: {}", _0)] 3080f20d70SHarlanC RTCError(#[cause] RTCError), 31*a4ef5d6cSHarlanC #[fail(display = "tokio: oneshot receiver err: {}", _0)] 32*a4ef5d6cSHarlanC RecvError(#[cause] RecvError), 3369de9bbdSHarlanC #[fail(display = "stream hub event send error")] 3480f20d70SHarlanC StreamHubEventSendErr, 3569de9bbdSHarlanC #[fail(display = "cannot receive frame data from stream hub")] 3680f20d70SHarlanC CannotReceiveFrameData, 3769de9bbdSHarlanC #[fail(display = "Http Request path error")] 3880f20d70SHarlanC HttpRequestPathError, 3969de9bbdSHarlanC #[fail(display = "Not supported")] 4080f20d70SHarlanC HttpRequestNotSupported, 4169de9bbdSHarlanC #[fail(display = "Empty sdp data")] 4280f20d70SHarlanC HttpRequestEmptySdp, 4369de9bbdSHarlanC #[fail(display = "Cannot find Content-Length")] 4480f20d70SHarlanC HttpRequestNoContentLength, 45*a4ef5d6cSHarlanC #[fail(display = "Channel receive error")] 46*a4ef5d6cSHarlanC ChannelRecvError, 4780f20d70SHarlanC } 4880f20d70SHarlanC 4980f20d70SHarlanC impl From<RTCError> for SessionError { from(error: RTCError) -> Self5080f20d70SHarlanC fn from(error: RTCError) -> Self { 5180f20d70SHarlanC SessionError { 5280f20d70SHarlanC value: SessionErrorValue::RTCError(error), 5380f20d70SHarlanC } 5480f20d70SHarlanC } 5580f20d70SHarlanC } 5680f20d70SHarlanC 5780f20d70SHarlanC impl From<BytesIOError> for SessionError { from(error: BytesIOError) -> Self5880f20d70SHarlanC fn from(error: BytesIOError) -> Self { 5980f20d70SHarlanC SessionError { 6080f20d70SHarlanC value: SessionErrorValue::BytesIOError(error), 6180f20d70SHarlanC } 6280f20d70SHarlanC } 6380f20d70SHarlanC } 6480f20d70SHarlanC 6580f20d70SHarlanC impl From<BytesReadError> for SessionError { from(error: BytesReadError) -> Self6680f20d70SHarlanC fn from(error: BytesReadError) -> Self { 6780f20d70SHarlanC SessionError { 6880f20d70SHarlanC value: SessionErrorValue::BytesReadError(error), 6980f20d70SHarlanC } 7080f20d70SHarlanC } 7180f20d70SHarlanC } 7280f20d70SHarlanC 7380f20d70SHarlanC impl From<BytesWriteError> for SessionError { from(error: BytesWriteError) -> Self7480f20d70SHarlanC fn from(error: BytesWriteError) -> Self { 7580f20d70SHarlanC SessionError { 7680f20d70SHarlanC value: SessionErrorValue::BytesWriteError(error), 7780f20d70SHarlanC } 7880f20d70SHarlanC } 7980f20d70SHarlanC } 8080f20d70SHarlanC 8180f20d70SHarlanC impl From<Utf8Error> for SessionError { from(error: Utf8Error) -> Self8280f20d70SHarlanC fn from(error: Utf8Error) -> Self { 8380f20d70SHarlanC SessionError { 8480f20d70SHarlanC value: SessionErrorValue::Utf8Error(error), 8580f20d70SHarlanC } 8680f20d70SHarlanC } 8780f20d70SHarlanC } 8880f20d70SHarlanC 89*a4ef5d6cSHarlanC impl From<ChannelError> for SessionError { from(error: ChannelError) -> Self90*a4ef5d6cSHarlanC fn from(error: ChannelError) -> Self { 91*a4ef5d6cSHarlanC SessionError { 92*a4ef5d6cSHarlanC value: SessionErrorValue::ChannelError(error), 93*a4ef5d6cSHarlanC } 94*a4ef5d6cSHarlanC } 95*a4ef5d6cSHarlanC } 96*a4ef5d6cSHarlanC 97*a4ef5d6cSHarlanC impl From<RecvError> for SessionError { from(error: RecvError) -> Self98*a4ef5d6cSHarlanC fn from(error: RecvError) -> Self { 99*a4ef5d6cSHarlanC SessionError { 100*a4ef5d6cSHarlanC value: SessionErrorValue::RecvError(error), 101*a4ef5d6cSHarlanC } 102*a4ef5d6cSHarlanC } 103*a4ef5d6cSHarlanC } 104*a4ef5d6cSHarlanC 10580f20d70SHarlanC impl fmt::Display for SessionError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result10680f20d70SHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 10780f20d70SHarlanC fmt::Display::fmt(&self.value, f) 10880f20d70SHarlanC } 10980f20d70SHarlanC } 11080f20d70SHarlanC 11180f20d70SHarlanC impl Fail for SessionError { cause(&self) -> Option<&dyn Fail>11280f20d70SHarlanC fn cause(&self) -> Option<&dyn Fail> { 11380f20d70SHarlanC self.value.cause() 11480f20d70SHarlanC } 11580f20d70SHarlanC backtrace(&self) -> Option<&Backtrace>11680f20d70SHarlanC fn backtrace(&self) -> Option<&Backtrace> { 11780f20d70SHarlanC self.value.backtrace() 11880f20d70SHarlanC } 11980f20d70SHarlanC } 120