cbit 0.1.1

A proc-macro to use callback-based iterators with `for`-loop syntax and functionality
Documentation
use std::ops::ControlFlow;

use cbit::cbit;

fn main() {
    assert_eq!(demo(&[1, 2, 3]), 6);
    assert_eq!(demo(&[1, 2, 3, 4, 101, 8]), -1);
}

fn demo(list: &[i32]) -> i32 {
    cbit!(for (accum, value) in reduce(0, list) {
        if *value > 100 {
            break -1;
        }
        accum + value
    })
}

fn reduce<T, I: IntoIterator, B>(
    initial: T,
    values: I,
    mut f: impl FnMut((T, I::Item)) -> ControlFlow<B, T>,
) -> ControlFlow<B, T> {
    let mut accum = initial;
    for value in values {
        accum = f((accum, value))?;
    }
    ControlFlow::Continue(accum)
}