Ever got frustrated when you realize that the for loop you were writing...
fn foo(mut iter: impl Iterator<Item=i32>) {
for i in iter {
// do something...
if i == 42 {
// ughh
}
}
}...needs to repeat the current iteration in some cases?
You may though: "Oh come on now I need to think on how to rewrite this into a while loop!"
Fear not! Cause we've got
Import for_each_repeat::ForEachRepeat and put your for loop's body into a closure, that has to return LoopControl type.
Using Repeat you are able to redo current iteration with the same iterator value.
use for_each_repeat::{ForEachRepeat, LoopControl};
fn foo(mut iter: impl Iterator<Item=i32>) {
let _: Option<()> = iter.for_each_repeat(|i| {
// do something...
if i == 42 {
// process it...
return LoopControl::Repeat(i);
}
LoopControl::Continue(())
});
}This crate can be used in no_std environment.