3 个版本
| 0.1.2 | 2021 年 5 月 3 日 |
|---|---|
| 0.1.1 | 2021 年 5 月 3 日 |
| 0.1.0 | 2021 年 5 月 2 日 |
1596 在 Rust 模式
802 每月下载量
26KB
167 行
nonzero_lit
一个小型宏库,提供安全、简单且完全零成本的从 core::num 构建常量或字面量实例的方式。
特性
-
该库完全支持
no_std。 -
支持所有
NonZero类型core::num::NonZeroUsize通过nonzero_lit::usize!宏。core::num::NonZeroIsize通过nonzero_lit::isize!宏。core::num::NonZeroU128通过nonzero_lit::u128!宏。core::num::NonZeroI128通过nonzero_lit::i128!宏。core::num::NonZeroU64通过nonzero_lit::u64!宏。core::num::NonZeroI64通过nonzero_lit::i64!宏。core::num::NonZeroU32通过nonzero_lit::u32!宏。core::num::NonZeroI32通过nonzero_lit::i32!宏。core::num::NonZeroU16通过nonzero_lit::u16!宏。core::num::NonZeroI16通过nonzero_lit::i16!宏。core::num::NonZeroU8通过nonzero_lit::u8!宏。core::num::NonZeroI8通过nonzero_lit::i8!宏。
-
完全零成本,即使是调试构建 - 我们始终将常量评估为
const。 -
宏的输入可以是任意常量表达式。这包括
const fn调用,这会使手动验证结果为非零变得困难。 -
误用(尝试使用零值创建
NonZero$Int)始终在编译时检测到,即使宏没有用于初始化常量。 -
没有不安全代码。
用法
将此添加到您的 Cargo.toml 中
[dependencies]
nonzero_lit = "0.1"
示例
let x = nonzero_lit::i32!(4);
assert_eq!(x.get(), 4);
const FERRIS: core::num::NonZeroU32 = nonzero_lit::u32!(0xf34415);
assert_eq!(FERRIS.get(), 0xf34415);
const FERRIS: core::num::NonZeroU32 = nonzero_lit::u32!(0xf34415);
assert_eq!(FERRIS.get(), 0xf34415);
许可
公共领域,如 此处 解释。如果这不可接受,它也可以根据您的选择在 Apache-2.0 或 MIT 许可证下提供。