6 个版本
0.2.2 | 2023 年 12 月 22 日 |
---|---|
0.2.1 | 2023 年 3 月 14 日 |
0.2.0 | 2023 年 1 月 4 日 |
0.1.2 | 2023 年 1 月 4 日 |
在 Rust 模式 中排名第 493
每月下载 24 次
7KB
54 行
range_checker
range_checker 是一个 derive-macro 库,旨在为结构体提供声明性边界检查和过滤。
示例
use range_checker::Check;
#[derive(Debug, Default, Check)]
struct TestStruct {
#[range(..=5)]
#[range(20..)]
#[filter(|x| x % 2 != 0)]
#[fallback(255)]
pub v0: u8,
#[range(-1.0..=5.0)]
#[fallback(3.1)]
v1: f32,
#[filter(|&x| x > 8.0)]
#[fallback(9.9)]
v2: f64,
#[range(..-1)]
#[fallback(|x| {println!("test fallback closure."); x - 5})]
v3: isize,
#[filter(|x:&str| !x.is_empty())]
v4: String,
}
fn main() {
let a = TestStruct::default();
if let Ok(_) = a.check() {
todo!{}
}
}
功能
range
使用 #[range(...)]
来确定命名结构体字段的范围。
多个 #[range(...)]
将通过 ||
组合,允许配置所需的任何范围。
filter
使用 #[filter(#closure)]
来过滤命名结构体的字段,#closure: |#type_of_field| -> bool
。
多个 #[filter(#closure)]
将通过 &&
组合。
#[filter(#closure)]
将与 #[range(...)]
通过 &&
进行组合。
回退
通过
fn check_with_callback()
激活
使用 #[fallback(#closure|#lit)]
来设置命名结构体的字段的回退行为,#closure: |#type_of_field| -> #type_of_field
。
如果设置回退属性的字段打破了它的范围或过滤器,fn check_with_fallback()
将返回 Ok(_)
。
检查或 CheckVerbose
range_checker::Check
将在任意字段打破其范围或过滤器时立即返回 Err(())
。
range_checker::CheckVerbose
将检查所有字段,并在所有损坏的字段都具有回退属性时返回详细信息,如 Err(Vec<Error>)
或 Ok(Vec<Error>)
。
展开示例
这里 (https://github.com/TYPEmber/range_checker/tree/master/examples/expand_code.md) 是一个展开示例
use range_checker::Check;
use range_checker::CheckVerbose;
#[derive(Debug, Default, CheckVerbose)]
struct TestStruct {
#[range(..=5)]
#[range(20..)]
#[filter(|x| x % 2 != 0)]
#[fallback(255)]
pub v0: u8,
#[range(-1.0..=5.0)]
#[fallback(3.1)]
v1: f32,
#[filter(|&x| x > 8.0)]
#[fallback(9.9)]
v2: f64,
#[range(..-1)]
#[fallback(|x| {println!("test fallback closure."); x - 5})]
v3: isize,
}
依赖
~1.5MB
~34K SLoC