3个版本

0.2.2 2022年5月9日
0.2.1 2022年5月2日
0.2.0 2022年5月2日
0.1.0 2022年4月18日

#208 in 无标准库

Zlib 许可证

48KB
556

Rust crates-io api-docs

用于将表达式解构为多个常量。

此crate的主要功能是multiconst 宏,该宏可以将表达式解构为多个常量。

示例

更多示例,请参阅multiconst 的文档

基本

此示例演示了将数组(长度自动推断)解构为多个常量的过程。

use multiconst::multiconst;

assert_eq!(A, 0b11);
assert_eq!(B, 0b111);
assert_eq!(C, 0b1111);
assert_eq!(D, 0b11111);

multiconst!{
    pub const [A, B, C, D]: [u64; _] = mersennes_from(2);
}

/// Generates all mersenne numbers (binary numbers that are all `1` bits)
/// from `start` amount of 1s up to `start + N - 1`.
const fn mersennes_from<const N: usize>(start: u32) -> [u64; N] {
    let mut out = [0; N];
    multiconst::for_range!{i in 0..N =>
        out[i] = (1 << (i as u32 + start)) - 1;
    }
    out
}


结构体

此示例演示了如何解构实现 FieldType 的结构体。

此示例使用 FieldType derive 宏(需要 "derive" 功能),使得可以在不注解类型的情况下解构结构体字段。

use multiconst::{FieldType, multiconst};

assert_eq!(MIN, 3);
assert_eq!(MAX, 21);


multiconst!{
    const MinMax{min: MIN, max: MAX}: MinMax = min_max(&[21, 13, 3, 8, 5]);
}

#[derive(FieldType)]
struct MinMax {
    min: u32,
    max: u32,
}

const fn min_max(elems: &[u32]) -> MinMax {
    let mut min = u32::MAX;
    let mut max = 0;
    
    multiconst::for_range!{i in 0..elems.len() =>
        let elem = elems[i];
        
        if elem < min { min = elem; }
        if elem > max { max = elem; }
    }
    
    MinMax{min, max}
}

功能

所有这些crate功能都是可选的

无std支持

multiconst#![no_std],它可以在任何可以使用Rust的地方使用。

最低支持的Rust版本

multiconst 需要 Rust 1.51.0,需要crate功能来使用更新的语言特性。

依赖项

~220KB