xref: /xiu/protocol/rtsp/src/session/errors.rs (revision a4ef5d6c)
18e71d710SHarlan use {
2b36cf5daSHarlan     crate::rtp::errors::{PackerError, UnPackerError},
38e71d710SHarlan     bytesio::bytes_errors::BytesReadError,
48e71d710SHarlan     bytesio::{bytes_errors::BytesWriteError, bytesio_errors::BytesIOError},
58e71d710SHarlan     failure::{Backtrace, Fail},
68e71d710SHarlan     std::fmt,
78e71d710SHarlan     std::str::Utf8Error,
8*a4ef5d6cSHarlanC     streamhub::errors::ChannelError,
9*a4ef5d6cSHarlanC     tokio::sync::oneshot::error::RecvError,
108e71d710SHarlan };
118e71d710SHarlan 
128e71d710SHarlan #[derive(Debug)]
138e71d710SHarlan pub struct SessionError {
148e71d710SHarlan     pub value: SessionErrorValue,
158e71d710SHarlan }
168e71d710SHarlan 
178e71d710SHarlan #[derive(Debug, Fail)]
188e71d710SHarlan pub enum SessionErrorValue {
1969de9bbdSHarlanC     #[fail(display = "net io error: {}", _0)]
208e71d710SHarlan     BytesIOError(#[cause] BytesIOError),
2169de9bbdSHarlanC     #[fail(display = "bytes read error: {}", _0)]
228e71d710SHarlan     BytesReadError(#[cause] BytesReadError),
2369de9bbdSHarlanC     #[fail(display = "bytes write error: {}", _0)]
248e71d710SHarlan     BytesWriteError(#[cause] BytesWriteError),
2569de9bbdSHarlanC     #[fail(display = "Utf8Error: {}", _0)]
268e71d710SHarlan     Utf8Error(#[cause] Utf8Error),
2769de9bbdSHarlanC     #[fail(display = "UnPackerError: {}", _0)]
28b36cf5daSHarlan     UnPackerError(#[cause] UnPackerError),
2969de9bbdSHarlanC     #[fail(display = "stream hub event send error")]
308e71d710SHarlan     StreamHubEventSendErr,
3169de9bbdSHarlanC     #[fail(display = "cannot receive frame data from stream hub")]
328e71d710SHarlan     CannotReceiveFrameData,
3369de9bbdSHarlanC     #[fail(display = "pack error: {}", _0)]
348e71d710SHarlan     PackerError(#[cause] PackerError),
35*a4ef5d6cSHarlanC     #[fail(display = "event execute error: {}", _0)]
36*a4ef5d6cSHarlanC     ChannelError(#[cause] ChannelError),
37*a4ef5d6cSHarlanC     #[fail(display = "tokio: oneshot receiver err: {}", _0)]
38*a4ef5d6cSHarlanC     RecvError(#[cause] RecvError),
39*a4ef5d6cSHarlanC     #[fail(display = "Channel receive error")]
40*a4ef5d6cSHarlanC     ChannelRecvError,
418e71d710SHarlan }
428e71d710SHarlan 
438e71d710SHarlan impl From<BytesIOError> for SessionError {
from(error: BytesIOError) -> Self448e71d710SHarlan     fn from(error: BytesIOError) -> Self {
458e71d710SHarlan         SessionError {
468e71d710SHarlan             value: SessionErrorValue::BytesIOError(error),
478e71d710SHarlan         }
488e71d710SHarlan     }
498e71d710SHarlan }
508e71d710SHarlan 
518e71d710SHarlan impl From<BytesReadError> for SessionError {
from(error: BytesReadError) -> Self528e71d710SHarlan     fn from(error: BytesReadError) -> Self {
538e71d710SHarlan         SessionError {
548e71d710SHarlan             value: SessionErrorValue::BytesReadError(error),
558e71d710SHarlan         }
568e71d710SHarlan     }
578e71d710SHarlan }
588e71d710SHarlan 
598e71d710SHarlan impl From<BytesWriteError> for SessionError {
from(error: BytesWriteError) -> Self608e71d710SHarlan     fn from(error: BytesWriteError) -> Self {
618e71d710SHarlan         SessionError {
628e71d710SHarlan             value: SessionErrorValue::BytesWriteError(error),
638e71d710SHarlan         }
648e71d710SHarlan     }
658e71d710SHarlan }
668e71d710SHarlan 
678e71d710SHarlan impl From<Utf8Error> for SessionError {
from(error: Utf8Error) -> Self688e71d710SHarlan     fn from(error: Utf8Error) -> Self {
698e71d710SHarlan         SessionError {
708e71d710SHarlan             value: SessionErrorValue::Utf8Error(error),
718e71d710SHarlan         }
728e71d710SHarlan     }
738e71d710SHarlan }
748e71d710SHarlan 
758e71d710SHarlan impl From<PackerError> for SessionError {
from(error: PackerError) -> Self768e71d710SHarlan     fn from(error: PackerError) -> Self {
778e71d710SHarlan         SessionError {
788e71d710SHarlan             value: SessionErrorValue::PackerError(error),
798e71d710SHarlan         }
808e71d710SHarlan     }
818e71d710SHarlan }
828e71d710SHarlan 
83b36cf5daSHarlan impl From<UnPackerError> for SessionError {
from(error: UnPackerError) -> Self84b36cf5daSHarlan     fn from(error: UnPackerError) -> Self {
85b36cf5daSHarlan         SessionError {
86b36cf5daSHarlan             value: SessionErrorValue::UnPackerError(error),
87b36cf5daSHarlan         }
88b36cf5daSHarlan     }
89b36cf5daSHarlan }
90b36cf5daSHarlan 
91*a4ef5d6cSHarlanC impl From<ChannelError> for SessionError {
from(error: ChannelError) -> Self92*a4ef5d6cSHarlanC     fn from(error: ChannelError) -> Self {
93*a4ef5d6cSHarlanC         SessionError {
94*a4ef5d6cSHarlanC             value: SessionErrorValue::ChannelError(error),
95*a4ef5d6cSHarlanC         }
96*a4ef5d6cSHarlanC     }
97*a4ef5d6cSHarlanC }
98*a4ef5d6cSHarlanC 
99*a4ef5d6cSHarlanC impl From<RecvError> for SessionError {
from(error: RecvError) -> Self100*a4ef5d6cSHarlanC     fn from(error: RecvError) -> Self {
101*a4ef5d6cSHarlanC         SessionError {
102*a4ef5d6cSHarlanC             value: SessionErrorValue::RecvError(error),
103*a4ef5d6cSHarlanC         }
104*a4ef5d6cSHarlanC     }
105*a4ef5d6cSHarlanC }
106*a4ef5d6cSHarlanC 
1078e71d710SHarlan impl fmt::Display for SessionError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result1088e71d710SHarlan     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1098e71d710SHarlan         fmt::Display::fmt(&self.value, f)
1108e71d710SHarlan     }
1118e71d710SHarlan }
1128e71d710SHarlan 
1138e71d710SHarlan impl Fail for SessionError {
cause(&self) -> Option<&dyn Fail>1148e71d710SHarlan     fn cause(&self) -> Option<&dyn Fail> {
1158e71d710SHarlan         self.value.cause()
1168e71d710SHarlan     }
1178e71d710SHarlan 
backtrace(&self) -> Option<&Backtrace>1188e71d710SHarlan     fn backtrace(&self) -> Option<&Backtrace> {
1198e71d710SHarlan         self.value.backtrace()
1208e71d710SHarlan     }
1218e71d710SHarlan }
122