1 use crate::StdError; 2 use core::fmt::{self, Debug, Display}; 3 4 #[cfg(error_generic_member_access)] 5 use std::error::Request; 6 7 #[repr(transparent)] 8 pub struct MessageError<M>(pub M); 9 10 impl<M> Debug for MessageError<M> 11 where 12 M: Display + Debug, 13 { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result14 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 15 Debug::fmt(&self.0, f) 16 } 17 } 18 19 impl<M> Display for MessageError<M> 20 where 21 M: Display + Debug, 22 { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result23 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 24 Display::fmt(&self.0, f) 25 } 26 } 27 28 impl<M> StdError for MessageError<M> where M: Display + Debug + 'static {} 29 30 #[repr(transparent)] 31 pub struct DisplayError<M>(pub M); 32 33 impl<M> Debug for DisplayError<M> 34 where 35 M: Display, 36 { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result37 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 38 Display::fmt(&self.0, f) 39 } 40 } 41 42 impl<M> Display for DisplayError<M> 43 where 44 M: Display, 45 { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result46 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 47 Display::fmt(&self.0, f) 48 } 49 } 50 51 impl<M> StdError for DisplayError<M> where M: Display + 'static {} 52 53 #[cfg(feature = "std")] 54 #[repr(transparent)] 55 pub struct BoxedError(pub Box<dyn StdError + Send + Sync>); 56 57 #[cfg(feature = "std")] 58 impl Debug for BoxedError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result59 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 60 Debug::fmt(&self.0, f) 61 } 62 } 63 64 #[cfg(feature = "std")] 65 impl Display for BoxedError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result66 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 67 Display::fmt(&self.0, f) 68 } 69 } 70 71 #[cfg(feature = "std")] 72 impl StdError for BoxedError { source(&self) -> Option<&(dyn StdError + 'static)>73 fn source(&self) -> Option<&(dyn StdError + 'static)> { 74 self.0.source() 75 } 76 77 #[cfg(error_generic_member_access)] provide<'a>(&'a self, request: &mut Request<'a>)78 fn provide<'a>(&'a self, request: &mut Request<'a>) { 79 self.0.provide(request); 80 } 81 } 82