From 1cbcd3fc8803611997b600f3cc92339288d2b318 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Wed, 2 Jul 2025 11:38:33 +0000 Subject: [PATCH] Add Result traits map_ref()/and_then_ref(). Signed-off-by: Jason Volk --- src/core/utils/result.rs | 9 ++++++--- src/core/utils/result/and_then_ref.rs | 17 +++++++++++++++++ src/core/utils/result/map_ref.rs | 17 +++++++++++++++++ 3 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 src/core/utils/result/and_then_ref.rs create mode 100644 src/core/utils/result/map_ref.rs diff --git a/src/core/utils/result.rs b/src/core/utils/result.rs index 1ad5371b..675e2ffa 100644 --- a/src/core/utils/result.rs +++ b/src/core/utils/result.rs @@ -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 = std::result::Result; diff --git a/src/core/utils/result/and_then_ref.rs b/src/core/utils/result/and_then_ref.rs new file mode 100644 index 00000000..593bb5cc --- /dev/null +++ b/src/core/utils/result/and_then_ref.rs @@ -0,0 +1,17 @@ +use super::Result; + +pub trait AndThenRef { + fn and_then_ref(self, op: F) -> Result + where + F: FnOnce(&T) -> Result; +} + +impl AndThenRef for Result { + #[inline] + fn and_then_ref(self, op: F) -> Result + where + F: FnOnce(&T) -> Result, + { + self.and_then(|t| op(&t)) + } +} diff --git a/src/core/utils/result/map_ref.rs b/src/core/utils/result/map_ref.rs new file mode 100644 index 00000000..47d834e2 --- /dev/null +++ b/src/core/utils/result/map_ref.rs @@ -0,0 +1,17 @@ +use super::Result; + +pub trait MapRef { + fn map_ref(self, op: F) -> Result + where + F: FnOnce(&T) -> U; +} + +impl MapRef for Result { + #[inline] + fn map_ref(self, op: F) -> Result + where + F: FnOnce(&T) -> U, + { + self.map(|t| op(&t)) + } +}