mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 01:04:03 +00:00
Rollup merge of #99454 - benluelo:control-flow/continue-combinators, r=scottmcm
Add map_continue and continue_value combinators to ControlFlow As suggested in this comment: https://github.com/rust-lang/rust/issues/75744#issuecomment-1188549494 Related tracking issue: https://github.com/rust-lang/rust/issues/75744 r? ``````@scottmcm``````
This commit is contained in:
commit
9610c71b1e
@ -195,6 +195,41 @@ impl<B, C> ControlFlow<B, C> {
|
||||
ControlFlow::Break(x) => ControlFlow::Break(f(x)),
|
||||
}
|
||||
}
|
||||
|
||||
/// Converts the `ControlFlow` into an `Option` which is `Some` if the
|
||||
/// `ControlFlow` was `Continue` and `None` otherwise.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(control_flow_enum)]
|
||||
/// use std::ops::ControlFlow;
|
||||
///
|
||||
/// assert_eq!(ControlFlow::<i32, String>::Break(3).continue_value(), None);
|
||||
/// assert_eq!(ControlFlow::<String, i32>::Continue(3).continue_value(), Some(3));
|
||||
/// ```
|
||||
#[inline]
|
||||
#[unstable(feature = "control_flow_enum", reason = "new API", issue = "75744")]
|
||||
pub fn continue_value(self) -> Option<C> {
|
||||
match self {
|
||||
ControlFlow::Continue(x) => Some(x),
|
||||
ControlFlow::Break(..) => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Maps `ControlFlow<B, C>` to `ControlFlow<B, T>` by applying a function
|
||||
/// to the continue value in case it exists.
|
||||
#[inline]
|
||||
#[unstable(feature = "control_flow_enum", reason = "new API", issue = "75744")]
|
||||
pub fn map_continue<T, F>(self, f: F) -> ControlFlow<B, T>
|
||||
where
|
||||
F: FnOnce(C) -> T,
|
||||
{
|
||||
match self {
|
||||
ControlFlow::Continue(x) => ControlFlow::Continue(f(x)),
|
||||
ControlFlow::Break(x) => ControlFlow::Break(x),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// These are used only as part of implementing the iterator adapters.
|
||||
|
Loading…
Reference in New Issue
Block a user