#[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>;
}
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),
}
}
}