From a903294cece37a573e2cbe9d2f1213e37b66f697 Mon Sep 17 00:00:00 2001 From: Julio Biason Date: Thu, 22 Dec 2022 15:28:46 -0300 Subject: [PATCH] Some testing with ControlFlow --- cflow.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 cflow.rs diff --git a/cflow.rs b/cflow.rs new file mode 100644 index 0000000..a619c8c --- /dev/null +++ b/cflow.rs @@ -0,0 +1,35 @@ +//! Testing ControlFlow + +use std::ops::ControlFlow; + +#[derive(Debug)] +enum ValueError { + Odd, + Zero, +} + +fn main() { + let invalid = [1, 3, 4, 0, 2, 4, 1]; + let all_valid = [2, 2, 2, 2, 4]; + + let res_invalid = process(&invalid); + println!("Invalid: {:?}", res_invalid); +} + +fn process(values: &[u8]) -> Result, ValueError> { + let result = values + .iter() + .map(|x| { + if *x == 0 { + ControlFlow::Break(Err(ValueError::Zero)) + // or `return Err(ValueError::Zero)` + } else if *x % 2 != 0 { + ControlFlow::Break(Err(ValueError::Odd)) + // or `return Err(ValueError::Odd)` + } else { + ControlFlow::Continue(*x * 2) + } + }) + .collect::>(); + Ok(result) +}