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