xref: /xiu/protocol/webrtc/src/session/errors.rs (revision a4ef5d6c)
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