15 个版本 (2 个稳定版本)
使用旧的 Rust 2015
1.1.0 | 2019年11月3日 |
---|---|
0.3.4 | 2019年8月12日 |
0.3.3 | 2019年6月12日 |
0.3.1 | 2018年11月15日 |
0.2.3 | 2017年8月24日 |
#45 in Rust 模式
5,181,337 每月下载量
用于 10,497 个 crate (797 个直接使用)
46KB
243 行
Rust 的编译时断言,由 Nikolai Vazquez 提供。
这个库允许您确保关于常量、类型等的正确假设。请参阅 文档 和 常见问题解答 以获取更多信息!
安装
这个 crate 可在 crates.io 上找到,可以通过将以下内容添加到您的项目 Cargo.toml
[dependencies]
static_assertions = "1.1.0"
以及以下内容添加到 crate 根目录 (main.rs
或 lib.rs
)
#[macro_use]
extern crate static_assertions;
用法
此 crate 公开了以下宏
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
,了解从一个版本到另一个版本的所有更改。
许可
您可以选择以下任一许可来发布此项目:
。