#[cfg(feature = "std")] use std::error::Error; use crate::{unexpected::Errorable, RawUnexpected}; mod sealed { pub trait Sealed {} impl Sealed for Result {} } use sealed::Sealed; /// Provides [`Result::unexpect`] /// /// [`Result::unexpect`]: `ResultErrorExt::unexpect` #[cfg(feature = "std")] pub trait ResultErrorExt: Sealed { /// Converts `Result` to `Result`. /// /// # Examples /// /// Basic usage: /// /// ``` /// use exun::*; /// use core::fmt::Error; /// /// let res: Result = Err(Error); /// let res: Result = res.unexpect(); /// ``` /// /// Use with the try operator /// /// ``` /// use exun::*; /// use core::fmt::Error; /// /// fn foo() -> Result { /// let res: Result = Err(Error); /// Ok(res.unexpect()?) /// } /// ``` /// /// Use with the try operator and [`Exun`] /// /// ``` /// use exun::*; /// use core::fmt::Error; /// /// fn foo() -> Result> { /// let res: Result = Err(Error); /// Ok(res.unexpect()?) /// } /// ``` /// /// [`Exun`]: `crate::Exun` #[allow(clippy::missing_errors_doc)] fn unexpect(self) -> Result; } #[cfg(feature = "std")] impl ResultErrorExt for Result { fn unexpect(self) -> Result { self.map_err(RawUnexpected::new) } } /// Provides [`Result::unexpect_msg`] /// /// [`Result::unexpect_msg`]: `ResultMsgExt::unexpect_msg` pub trait ResultMsgExt: Sealed { /// Converts `Result` to `Result`. /// /// This is provided for compatibility with `no_std`. If your type /// implements [`Error`], then you should prefer that instead. /// /// # Examples /// /// Basic usage: /// /// ``` /// use exun::*; /// /// let res: Result = Err("failure"); /// let res: Result = res.unexpect_msg(); /// ``` /// /// Use with the try operator /// /// ``` /// use exun::*; /// /// fn foo() -> Result { /// let res: Result = Err("failure"); /// Ok(res.unexpect_msg()?) /// } /// ``` /// /// Use with the try operator and [`Exun`] /// /// ``` /// use exun::*; /// /// fn foo() -> Result> { /// let res: Result = Err("failure"); /// Ok(res.unexpect_msg()?) /// } /// ``` /// /// [`Exun`]: `crate::Exun` #[allow(clippy::missing_errors_doc)] fn unexpect_msg(self) -> Result; } impl ResultMsgExt for Result { fn unexpect_msg(self) -> Result { self.map_err(RawUnexpected::msg) } }