Expand description

for_each_repeat

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

Repeat

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(())
    });
}

#![no_std]

This crate can be used in no_std environment.

Enums

Used to emulate the keywords’ behavior inside the closure passed to ForEachRepeat::for_each_repeat.

Traits

Consumes the iterator by calling the closure on each element, the next iteration is controlled by returned LoopControl variant.