xref: /xiu/protocol/webrtc/src/errors.rs (revision 69de9bbd)
180f20d70SHarlanC use {
280f20d70SHarlanC     failure::{Backtrace, Fail},
380f20d70SHarlanC     std::fmt,
480f20d70SHarlanC     webrtc::error::Error as RTCError,
580f20d70SHarlanC     webrtc::util::Error as RTCUtilError,
680f20d70SHarlanC };
780f20d70SHarlanC 
880f20d70SHarlanC #[derive(Debug)]
980f20d70SHarlanC pub struct WebRTCError {
1080f20d70SHarlanC     pub value: WebRTCErrorValue,
1180f20d70SHarlanC }
1280f20d70SHarlanC 
1380f20d70SHarlanC #[derive(Debug, Fail)]
1480f20d70SHarlanC pub enum WebRTCErrorValue {
15*69de9bbdSHarlanC     #[fail(display = "webrtc error: {}", _0)]
1680f20d70SHarlanC     RTCError(#[cause] RTCError),
17*69de9bbdSHarlanC     #[fail(display = "webrtc util error: {}", _0)]
1880f20d70SHarlanC     RTCUtilError(#[cause] RTCUtilError),
19*69de9bbdSHarlanC     #[fail(display = "cannot get local description")]
2080f20d70SHarlanC     CanNotGetLocalDescription,
2180f20d70SHarlanC }
2280f20d70SHarlanC 
2380f20d70SHarlanC impl From<RTCError> for WebRTCError {
from(error: RTCError) -> Self2480f20d70SHarlanC     fn from(error: RTCError) -> Self {
2580f20d70SHarlanC         WebRTCError {
2680f20d70SHarlanC             value: WebRTCErrorValue::RTCError(error),
2780f20d70SHarlanC         }
2880f20d70SHarlanC     }
2980f20d70SHarlanC }
3080f20d70SHarlanC 
3180f20d70SHarlanC impl From<RTCUtilError> for WebRTCError {
from(error: RTCUtilError) -> Self3280f20d70SHarlanC     fn from(error: RTCUtilError) -> Self {
3380f20d70SHarlanC         WebRTCError {
3480f20d70SHarlanC             value: WebRTCErrorValue::RTCUtilError(error),
3580f20d70SHarlanC         }
3680f20d70SHarlanC     }
3780f20d70SHarlanC }
3880f20d70SHarlanC 
3980f20d70SHarlanC impl fmt::Display for WebRTCError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result4080f20d70SHarlanC     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
4180f20d70SHarlanC         fmt::Display::fmt(&self.value, f)
4280f20d70SHarlanC     }
4380f20d70SHarlanC }
4480f20d70SHarlanC 
4580f20d70SHarlanC impl Fail for WebRTCError {
cause(&self) -> Option<&dyn Fail>4680f20d70SHarlanC     fn cause(&self) -> Option<&dyn Fail> {
4780f20d70SHarlanC         self.value.cause()
4880f20d70SHarlanC     }
4980f20d70SHarlanC 
backtrace(&self) -> Option<&Backtrace>5080f20d70SHarlanC     fn backtrace(&self) -> Option<&Backtrace> {
5180f20d70SHarlanC         self.value.backtrace()
5280f20d70SHarlanC     }
5380f20d70SHarlanC }
54