#[expect(
clippy::missing_errors_doc,
reason = "function signature is self-explaining"
)]
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(Some),
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),
}
}
}