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