1*c8d4d932SHarlan use { 2*c8d4d932SHarlan failure::{Backtrace, Fail}, 3*c8d4d932SHarlan std::fmt, 4*c8d4d932SHarlan }; 5*c8d4d932SHarlan 6*c8d4d932SHarlan #[derive(Debug)] 7*c8d4d932SHarlan pub struct RtmpUrlParseError { 8*c8d4d932SHarlan pub value: RtmpUrlParseErrorValue, 9*c8d4d932SHarlan } 10*c8d4d932SHarlan #[derive(Debug, Fail)] 11*c8d4d932SHarlan pub enum RtmpUrlParseErrorValue { 12*c8d4d932SHarlan #[fail(display = "The url is not valid\n")] 13*c8d4d932SHarlan Notvalid, 14*c8d4d932SHarlan } 15*c8d4d932SHarlan 16*c8d4d932SHarlan impl fmt::Display for RtmpUrlParseError { 17*c8d4d932SHarlan fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 18*c8d4d932SHarlan fmt::Display::fmt(&self.value, f) 19*c8d4d932SHarlan } 20*c8d4d932SHarlan } 21*c8d4d932SHarlan 22*c8d4d932SHarlan impl Fail for RtmpUrlParseError { 23*c8d4d932SHarlan fn cause(&self) -> Option<&dyn Fail> { 24*c8d4d932SHarlan self.value.cause() 25*c8d4d932SHarlan } 26*c8d4d932SHarlan 27*c8d4d932SHarlan fn backtrace(&self) -> Option<&Backtrace> { 28*c8d4d932SHarlan self.value.backtrace() 29*c8d4d932SHarlan } 30*c8d4d932SHarlan } 31