@@ -195,6 +195,41 @@ impl<B, C> ControlFlow<B, C> {
195
195
ControlFlow :: Break ( x) => ControlFlow :: Break ( f ( x) ) ,
196
196
}
197
197
}
198
+
199
+ /// Converts the `ControlFlow` into an `Option` which is `Some` if the
200
+ /// `ControlFlow` was `Continue` and `None` otherwise.
201
+ ///
202
+ /// # Examples
203
+ ///
204
+ /// ```
205
+ /// #![feature(control_flow_enum)]
206
+ /// use std::ops::ControlFlow;
207
+ ///
208
+ /// assert_eq!(ControlFlow::<i32, String>::Break(3).continue_value(), None);
209
+ /// assert_eq!(ControlFlow::<String, i32>::Continue(3).continue_value(), Some(3));
210
+ /// ```
211
+ #[ inline]
212
+ #[ unstable( feature = "control_flow_enum" , reason = "new API" , issue = "75744" ) ]
213
+ pub fn continue_value ( self ) -> Option < C > {
214
+ match self {
215
+ ControlFlow :: Continue ( x) => Some ( x) ,
216
+ ControlFlow :: Break ( ..) => None ,
217
+ }
218
+ }
219
+
220
+ /// Maps `ControlFlow<B, C>` to `ControlFlow<B, T>` by applying a function
221
+ /// to the continue value in case it exists.
222
+ #[ inline]
223
+ #[ unstable( feature = "control_flow_enum" , reason = "new API" , issue = "75744" ) ]
224
+ pub fn map_continue < T , F > ( self , f : F ) -> ControlFlow < B , T >
225
+ where
226
+ F : FnOnce ( C ) -> T ,
227
+ {
228
+ match self {
229
+ ControlFlow :: Continue ( x) => ControlFlow :: Continue ( f ( x) ) ,
230
+ ControlFlow :: Break ( x) => ControlFlow :: Break ( x) ,
231
+ }
232
+ }
198
233
}
199
234
200
235
/// These are used only as part of implementing the iterator adapters.
0 commit comments