use std::fmt;
#[allow(clippy::missing_errors_doc)]
pub trait OptionExt<T> {
fn try_map<U, E, F>(self, f: F) -> Result<Option<U>, E>
where
F: FnOnce(T) -> Result<U, E>;
fn try_and_then<U, E, F>(self, f: F) -> Result<Option<U>, E>
where
F: FnOnce(T) -> Result<Option<U>, E>;
}
pub trait DisplayDebug: fmt::Display + fmt::Debug {}
impl<T> OptionExt<T> for Option<T> {
fn try_map<U, E, F>(self, f: F) -> Result<Option<U>, E>
where
F: FnOnce(T) -> Result<U, E>,
{
match self {
Some(x) => f(x).map(|inner| Some(inner)),
None => Ok(None),
}
}
fn try_and_then<U, E, F>(self, f: F) -> Result<Option<U>, E>
where
F: FnOnce(T) -> Result<Option<U>, E>,
{
match self {
Some(x) => f(x),
None => Ok(None),
}
}
}
impl<T: fmt::Display + fmt::Debug> DisplayDebug for T {}