@@ -187,6 +187,28 @@ impl<B, C> ControlFlow<B, C> {
187
187
}
188
188
}
189
189
190
+ /// Converts the `ControlFlow` into an `Result` which is `Ok` if the
191
+ /// `ControlFlow` was `Break` and `Err` if otherwise.
192
+ ///
193
+ /// # Examples
194
+ ///
195
+ /// ```
196
+ /// #![feature(control_flow_ok)]
197
+ ///
198
+ /// use std::ops::ControlFlow;
199
+ ///
200
+ /// assert_eq!(ControlFlow::<&str, i32>::Break("Stop right there!").break_ok(), Ok("Stop right there!"));
201
+ /// assert_eq!(ControlFlow::<&str, i32>::Continue(3).break_ok(), Err(3));
202
+ /// ```
203
+ #[ inline]
204
+ #[ unstable( feature = "control_flow_ok" , issue = "140266" ) ]
205
+ pub fn break_ok ( self ) -> Result < B , C > {
206
+ match self {
207
+ ControlFlow :: Continue ( c) => Err ( c) ,
208
+ ControlFlow :: Break ( b) => Ok ( b) ,
209
+ }
210
+ }
211
+
190
212
/// Maps `ControlFlow<B, C>` to `ControlFlow<T, C>` by applying a function
191
213
/// to the break value in case it exists.
192
214
#[ inline]
@@ -218,6 +240,28 @@ impl<B, C> ControlFlow<B, C> {
218
240
}
219
241
}
220
242
243
+ /// Converts the `ControlFlow` into an `Result` which is `Ok` if the
244
+ /// `ControlFlow` was `Continue` and `Err` if otherwise.
245
+ ///
246
+ /// # Examples
247
+ ///
248
+ /// ```
249
+ /// #![feature(control_flow_ok)]
250
+ ///
251
+ /// use std::ops::ControlFlow;
252
+ ///
253
+ /// assert_eq!(ControlFlow::<&str, i32>::Break("Stop right there!").continue_ok(), Err("Stop right there!"));
254
+ /// assert_eq!(ControlFlow::<&str, i32>::Continue(3).continue_ok(), Ok(3));
255
+ /// ```
256
+ #[ inline]
257
+ #[ unstable( feature = "control_flow_ok" , issue = "140266" ) ]
258
+ pub fn continue_ok ( self ) -> Result < C , B > {
259
+ match self {
260
+ ControlFlow :: Continue ( c) => Ok ( c) ,
261
+ ControlFlow :: Break ( b) => Err ( b) ,
262
+ }
263
+ }
264
+
221
265
/// Maps `ControlFlow<B, C>` to `ControlFlow<B, T>` by applying a function
222
266
/// to the continue value in case it exists.
223
267
#[ inline]
0 commit comments