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 许可证下提供。