1 个不稳定版本
0.0.1 | 2024年1月16日 |
---|
#144 在 #assert
13KB
Rust 的编译时断言,由 Nikolai Vazquez 提供。
这个库允许您确保关于常量、类型等的正确假设。请参阅 文档 和 常见问题解答 以获取更多信息!
安装
此包在 crates.io 上可用,可以通过将以下内容添加到项目的 Cargo.toml
[dependencies]
static_assertions = "1.1.0"
并添加到 crate 根目录(main.rs
或 lib.rs
)
#[macro_use]
extern crate static_assertions;
使用方法
此包公开以下宏
assert_cfg!
assert_eq_align!
assert_eq_size!
assert_eq_size_ptr!
assert_eq_size_val!
assert_fields!
assert_impl_all!
assert_impl_any!
assert_impl_one!
assert_not_impl_all!
assert_not_impl_any!
assert_obj_safe!
assert_trait_sub_all!
assert_trait_super_all!
assert_type_eq_all!
assert_type_ne_all!
const_assert!
const_assert_eq!
const_assert_ne!
常见问题解答
-
问题:我何时会想使用这个库?
答案:当您想确保常量、类型和特质的属性时,这个库非常有用。
基本示例
-
随着 1.39 版本的发布,
str::len
可以在const
上下文中调用。使用const_assert!
,可以检查从其他地方生成的字符串是否具有给定的大小const DATA: &str = include_str!("path/to/string.txt"); const_assert!(DATA.len() < 512);
-
有一个绝对必须实现某些特质的类型?使用
assert_impl_all!
,可以确保这一点struct Foo { value: // ... } assert_impl_all!(Foo: Send, Sync);
-
-
问题:我如何贡献?
答案:有几种方法!您可以
-
问:这会影响我的编译后的二进制文件吗?
答:不会!使用这个库没有运行时成本,因为所有检查都是在编译时进行的,因此不会生成代码来运行。
-
问:这会影响我的编译时间吗?
答:可能不会对任何可感知的程度产生影响。如果这是您的顾虑,可以将此库放入
dev-dependencies
[dev-dependencies] static_assertions = "1.1.0"
,然后可以在
#[cfg(test)]
#[cfg(test)] const_assert_eq!(MEANING_OF_LIFE, 42);
然而,断言只有在运行
cargo test
时才会被检查。这多少抵消了通过编译失败提前捕捉到错误静态条件的目的。 -
问:什么是
const _
?答:这是创建一个未命名的常量的方式。这样宏就可以从全局作用域中调用,而无需要求唯一的作用域标签。此库利用了评估
const
表达式的副作用。有关更多信息,请参阅功能的跟踪问题和问题#1。
更改
请参阅CHANGELOG.md
以了解从一个版本到另一个版本的所有更改。
许可证
此项目可根据您的选择发布为以下任一许可证:
。