use core::fmt::{self, Debug, Display}; use std::error::Error as StdError; use crate::{Diagnostic, LabeledSpan}; use crate as miette; #[repr(transparent)] pub(crate) struct DisplayError(pub(crate) M); #[repr(transparent)] pub(crate) struct MessageError(pub(crate) M); pub(crate) struct NoneError; impl Debug for DisplayError where M: Display, { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { Display::fmt(&self.0, f) } } impl Display for DisplayError where M: Display, { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { Display::fmt(&self.0, f) } } impl StdError for DisplayError where M: Display + 'static {} impl Diagnostic for DisplayError where M: Display + 'static {} impl Debug for MessageError where M: Display + Debug, { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { Debug::fmt(&self.0, f) } } impl Display for MessageError where M: Display + Debug, { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { Display::fmt(&self.0, f) } } impl StdError for MessageError where M: Display + Debug + 'static {} impl Diagnostic for MessageError where M: Display + Debug + 'static {} impl Debug for NoneError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { Debug::fmt("Option was None", f) } } impl Display for NoneError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { Display::fmt("Option was None", f) } } impl StdError for NoneError {} impl Diagnostic for NoneError {} #[repr(transparent)] pub(crate) struct BoxedError(pub(crate) Box); impl Diagnostic for BoxedError { fn code<'a>(&'a self) -> Option> { self.0.code() } fn severity(&self) -> Option { self.0.severity() } fn help<'a>(&'a self) -> Option> { self.0.help() } fn url<'a>(&'a self) -> Option> { self.0.url() } fn labels<'a>(&'a self) -> Option + 'a>> { self.0.labels() } } impl Debug for BoxedError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { Debug::fmt(&self.0, f) } } impl Display for BoxedError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { Display::fmt(&self.0, f) } } impl StdError for BoxedError {}