use core::fmt::{self, Display}; /// A compatibility wrapper around an error type from this crate. /// /// `Compat` implements `std::error::Error`, allowing the types from this /// crate to be passed to interfaces that expect a type of that trait. #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Default)] pub struct Compat { pub(crate) error: E, } impl Display for Compat { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { Display::fmt(&self.error, f) } } impl Compat { /// Unwraps this into the inner error. pub fn into_inner(self) -> E { self.error } /// Gets a reference to the inner error. pub fn get_ref(&self) -> &E { &self.error } } with_std! { use std::fmt::Debug; use std::error::Error as StdError; use Error; impl StdError for Compat { fn description(&self) -> &'static str { "An error has occurred." } } impl From for Box { fn from(error: Error) -> Box { Box::new(Compat { error }) } } impl From for Box { fn from(error: Error) -> Box { Box::new(Compat { error }) } } }