add Filter extension to Result
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
parent
e49aee61c1
commit
6b0eb7608d
2 changed files with 24 additions and 2 deletions
|
@ -1,4 +1,5 @@
|
|||
mod debug_inspect;
|
||||
mod filter;
|
||||
mod flat_ok;
|
||||
mod into_is_ok;
|
||||
mod log_debug_err;
|
||||
|
@ -8,8 +9,8 @@ mod not_found;
|
|||
mod unwrap_infallible;
|
||||
|
||||
pub use self::{
|
||||
debug_inspect::DebugInspect, flat_ok::FlatOk, into_is_ok::IntoIsOk, log_debug_err::LogDebugErr, log_err::LogErr,
|
||||
map_expect::MapExpect, not_found::NotFound, unwrap_infallible::UnwrapInfallible,
|
||||
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,
|
||||
};
|
||||
|
||||
pub type Result<T = (), E = crate::Error> = std::result::Result<T, E>;
|
||||
|
|
21
src/core/utils/result/filter.rs
Normal file
21
src/core/utils/result/filter.rs
Normal file
|
@ -0,0 +1,21 @@
|
|||
use super::Result;
|
||||
|
||||
pub trait Filter<T, E> {
|
||||
/// Similar to Option::filter
|
||||
#[must_use]
|
||||
fn filter<P, U>(self, predicate: P) -> Self
|
||||
where
|
||||
P: FnOnce(&T) -> Result<(), U>,
|
||||
E: From<U>;
|
||||
}
|
||||
|
||||
impl<T, E> Filter<T, E> for Result<T, E> {
|
||||
#[inline]
|
||||
fn filter<P, U>(self, predicate: P) -> Self
|
||||
where
|
||||
P: FnOnce(&T) -> Result<(), U>,
|
||||
E: From<U>,
|
||||
{
|
||||
self.and_then(move |t| predicate(&t).map(move |()| t).map_err(Into::into))
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue