xref: /xiu/protocol/rtsp/src/rtp/errors.rs (revision 69de9bbd)
18e71d710SHarlan use {
28e71d710SHarlan     failure::{Backtrace, Fail},
38e71d710SHarlan     std::fmt,
48e71d710SHarlan };
58e71d710SHarlan 
68e71d710SHarlan use bytesio::bytes_errors::BytesReadError;
78e71d710SHarlan use bytesio::bytes_errors::BytesWriteError;
88e71d710SHarlan 
98e71d710SHarlan #[derive(Debug)]
108e71d710SHarlan pub struct PackerError {
118e71d710SHarlan     pub value: PackerErrorValue,
128e71d710SHarlan }
138e71d710SHarlan 
148e71d710SHarlan impl Fail for PackerError {
cause(&self) -> Option<&dyn Fail>158e71d710SHarlan     fn cause(&self) -> Option<&dyn Fail> {
168e71d710SHarlan         self.value.cause()
178e71d710SHarlan     }
188e71d710SHarlan 
backtrace(&self) -> Option<&Backtrace>198e71d710SHarlan     fn backtrace(&self) -> Option<&Backtrace> {
208e71d710SHarlan         self.value.backtrace()
218e71d710SHarlan     }
228e71d710SHarlan }
238e71d710SHarlan 
248e71d710SHarlan impl fmt::Display for PackerError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result258e71d710SHarlan     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
268e71d710SHarlan         fmt::Display::fmt(&self.value, f)
278e71d710SHarlan     }
288e71d710SHarlan }
298e71d710SHarlan 
308e71d710SHarlan #[derive(Debug, Fail)]
318e71d710SHarlan pub enum PackerErrorValue {
32*69de9bbdSHarlanC     #[fail(display = "bytes read error: {}", _0)]
338e71d710SHarlan     BytesReadError(BytesReadError),
34*69de9bbdSHarlanC     #[fail(display = "bytes write error: {}", _0)]
358e71d710SHarlan     BytesWriteError(#[cause] BytesWriteError),
368e71d710SHarlan }
378e71d710SHarlan 
388e71d710SHarlan impl From<BytesReadError> for PackerError {
from(error: BytesReadError) -> Self398e71d710SHarlan     fn from(error: BytesReadError) -> Self {
408e71d710SHarlan         PackerError {
418e71d710SHarlan             value: PackerErrorValue::BytesReadError(error),
428e71d710SHarlan         }
438e71d710SHarlan     }
448e71d710SHarlan }
458e71d710SHarlan 
468e71d710SHarlan impl From<BytesWriteError> for PackerError {
from(error: BytesWriteError) -> Self478e71d710SHarlan     fn from(error: BytesWriteError) -> Self {
488e71d710SHarlan         PackerError {
498e71d710SHarlan             value: PackerErrorValue::BytesWriteError(error),
508e71d710SHarlan         }
518e71d710SHarlan     }
528e71d710SHarlan }
538e71d710SHarlan 
548e71d710SHarlan #[derive(Debug)]
558e71d710SHarlan pub struct UnPackerError {
568e71d710SHarlan     pub value: UnPackerErrorValue,
578e71d710SHarlan }
588e71d710SHarlan 
598e71d710SHarlan #[derive(Debug, Fail)]
608e71d710SHarlan pub enum UnPackerErrorValue {
61*69de9bbdSHarlanC     #[fail(display = "bytes read error: {}", _0)]
628e71d710SHarlan     BytesReadError(BytesReadError),
63*69de9bbdSHarlanC     #[fail(display = "bytes write error: {}", _0)]
648e71d710SHarlan     BytesWriteError(#[cause] BytesWriteError),
658e71d710SHarlan }
668e71d710SHarlan 
678e71d710SHarlan impl From<BytesReadError> for UnPackerError {
from(error: BytesReadError) -> Self688e71d710SHarlan     fn from(error: BytesReadError) -> Self {
698e71d710SHarlan         UnPackerError {
708e71d710SHarlan             value: UnPackerErrorValue::BytesReadError(error),
718e71d710SHarlan         }
728e71d710SHarlan     }
738e71d710SHarlan }
748e71d710SHarlan 
758e71d710SHarlan impl From<BytesWriteError> for UnPackerError {
from(error: BytesWriteError) -> Self768e71d710SHarlan     fn from(error: BytesWriteError) -> Self {
778e71d710SHarlan         UnPackerError {
788e71d710SHarlan             value: UnPackerErrorValue::BytesWriteError(error),
798e71d710SHarlan         }
808e71d710SHarlan     }
818e71d710SHarlan }
82b36cf5daSHarlan 
83b36cf5daSHarlan impl fmt::Display for UnPackerError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result84b36cf5daSHarlan     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
85b36cf5daSHarlan         fmt::Display::fmt(&self.value, f)
86b36cf5daSHarlan     }
87b36cf5daSHarlan }
88b36cf5daSHarlan 
89b36cf5daSHarlan impl Fail for UnPackerError {
cause(&self) -> Option<&dyn Fail>90b36cf5daSHarlan     fn cause(&self) -> Option<&dyn Fail> {
91b36cf5daSHarlan         self.value.cause()
92b36cf5daSHarlan     }
93b36cf5daSHarlan 
backtrace(&self) -> Option<&Backtrace>94b36cf5daSHarlan     fn backtrace(&self) -> Option<&Backtrace> {
95b36cf5daSHarlan         self.value.backtrace()
96b36cf5daSHarlan     }
97b36cf5daSHarlan }
98