Crate iota [] [src]

The iota! macro constructs a set of related constants.

#[macro_use]
extern crate iota;

iota! {
    const A: u8 = 1 << iota;
        | B
        | C
        | D
}

fn main() {
    assert_eq!(A, 1);
    assert_eq!(B, 2);
    assert_eq!(C, 4);
    assert_eq!(D, 8);
}

Within an iota! block, the iota variable is an untyped integer constant whose value begins at 0 and increments by 1 for every constant declared in the block.

#[macro_use]
extern crate iota;

iota! {
    const A: u8 = 1 << iota;
        | B

    const C: i32 = -1; // iota is not used but still incremented

    pub const D: u8 = iota * 2;
            | E
            | F
}

// `iota` begins again from 0 in this block
iota! {
    const G: usize = 1 << (iota + 10);
        | H
}

fn main() {
    assert_eq!(A, 1 << 0);
    assert_eq!(B, 1 << 1);

    assert_eq!(C, -1);

    assert_eq!(D, 3 * 2);
    assert_eq!(E, 4 * 2);
    assert_eq!(F, 5 * 2);

    assert_eq!(G, 1 << (0 + 10));
    assert_eq!(H, 1 << (1 + 10));
}

Macros

iota

Please refer to the crate-level documentation.