ctrl_macros 0.1.0

Control flow macros for Option and Result
Documentation
use ctrl_macros::{some_or, some_or_break, some_or_continue, some_or_return};

#[test]
fn test_some_or_return() {
    let mut value = 1;
    returns_early(Some(42), &mut value);
    assert_eq!(value, 42);

    let mut value = 1;
    returns_early(None, &mut value);
    assert_eq!(value, 1);
}

fn returns_early(input: Option<i32>, value: &mut i32) {
    let res = some_or_return!(input);
    *value = res;
}

#[test]
fn test_some_or_with_return() {
    assert_eq!(some_or_return_err(Some(1), 2), 1);
    assert_eq!(some_or_return_err(None, 2), 2);
}

fn some_or_return_err(input: Option<i32>, if_err: i32) -> i32 {
    let res = some_or!(input, return if_err);
    res
}

#[test]
fn test_some_or_continue() {
    let mut sum = 0;
    for i in 0..5 {
        let x = if i > 2 { Some(i) } else { None };

        let x = some_or_continue!(x);
        sum += x;
    }
    assert_eq!(3 + 4, sum);
}

#[test]
fn test_some_or_with_continue() {
    let mut sum = 0;
    for i in 0..5 {
        let x = if i > 2 { Some(i) } else { None };

        let x = some_or!(x, continue);
        sum += x;
    }
    assert_eq!(3 + 4, sum);
}

#[test]
fn test_some_or_break() {
    let mut sum = 0;
    for i in 0..5 {
        let x = if i > 2 { None } else { Some(i) };

        let x = some_or_break!(x);
        sum += x;
    }
    assert_eq!(1 + 2, sum);
}