Add Result traits map_ref()/and_then_ref().

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk
2025-07-02 11:38:33 +00:00
parent ad9ddd91cd
commit 1cbcd3fc88
3 changed files with 40 additions and 3 deletions

View File

@@ -1,3 +1,4 @@
mod and_then_ref;
mod debug_inspect;
mod filter;
mod flat_ok;
@@ -5,14 +6,16 @@ mod into_is_ok;
mod log_debug_err;
mod log_err;
mod map_expect;
mod map_ref;
mod not_found;
mod unwrap_infallible;
mod unwrap_or_err;
pub use self::{
debug_inspect::DebugInspect, filter::Filter, flat_ok::FlatOk, into_is_ok::IntoIsOk,
log_debug_err::LogDebugErr, log_err::LogErr, map_expect::MapExpect, not_found::NotFound,
unwrap_infallible::UnwrapInfallible, unwrap_or_err::UnwrapOrErr,
and_then_ref::AndThenRef, debug_inspect::DebugInspect, filter::Filter, flat_ok::FlatOk,
into_is_ok::IntoIsOk, log_debug_err::LogDebugErr, log_err::LogErr, map_expect::MapExpect,
map_ref::MapRef, not_found::NotFound, unwrap_infallible::UnwrapInfallible,
unwrap_or_err::UnwrapOrErr,
};
pub type Result<T = (), E = crate::Error> = std::result::Result<T, E>;

View File

@@ -0,0 +1,17 @@
use super::Result;
pub trait AndThenRef<T, E> {
fn and_then_ref<U, F>(self, op: F) -> Result<U, E>
where
F: FnOnce(&T) -> Result<U, E>;
}
impl<T, E> AndThenRef<T, E> for Result<T, E> {
#[inline]
fn and_then_ref<U, F>(self, op: F) -> Result<U, E>
where
F: FnOnce(&T) -> Result<U, E>,
{
self.and_then(|t| op(&t))
}
}

View File

@@ -0,0 +1,17 @@
use super::Result;
pub trait MapRef<T, E> {
fn map_ref<U, F>(self, op: F) -> Result<U, E>
where
F: FnOnce(&T) -> U;
}
impl<T, E> MapRef<T, E> for Result<T, E> {
#[inline]
fn map_ref<U, F>(self, op: F) -> Result<U, E>
where
F: FnOnce(&T) -> U,
{
self.map(|t| op(&t))
}
}