8 个不稳定版本 (3 个重大变更)
0.4.0 | 2023年5月21日 |
---|---|
0.3.0 | 2023年5月20日 |
0.2.1 | 2023年5月19日 |
0.1.3 | 2023年5月17日 |
#2716 在 解析器实现
83 每月下载量
74KB
1.5K SLoC
sanitise
一个用于无烦恼数据清理和验证的库。
sanitise
是一个 CSV 处理和验证库,它基于 YAML 配置文件在编译时生成代码。生成的代码是健壮的,不会崩溃。
no_std
环境受支持,但需要 alloc
包。
快速入门
将 sanitise
添加到你的 Cargo.toml
依赖项中
[dependencies]
sanitise = "0.1"
导入宏
use sanitise::sanitise_string;
然后调用
// main.rs
use std::{fs, iter::zip};
use sanitise::sanitise_string;
fn main() {
let csv = fs::read_to_string("data.csv").unwrap();
let ((time_millis, pulse, movement), (time_secs,)) = sanitise_string!(include_str!("sanitise_config.yaml"), &csv).unwrap();
println!("time_millis,time_secs,pulse,movement");
for (((time_millis, pulse), movement), time_secs) in zip(zip(zip(time_millis, pulse), movement), time_secs) {
println!("{time_millis},{time_secs},{pulse},{movement}")
}
}
# sanitise_config.yaml
processes:
- name: validate
columns:
- title: time
type: integer
- title: pulse
type: integer
max: 100
min: 40
on-invalid: average
valid-streak: 3
- title: movement
type: integer
valid-values: [0, 1]
output-type: boolean
output: "value == 1"
- name: process
columns:
- title: time
type: integer
output: "value / 1000"
- title: pulse
type: integer
ignore: true
- title: movement
type: integer
ignore: true
# data.csv
time,pulse,movement
0,67,0
15,45,1
126,132,1
sanitise_string!
的第一个参数必须是字符串字面量或扩展为字符串字面量的宏调用。第二个参数必须是解析为 CSV 格式 &str
的表达式。在上面的示例中,sanitise_config.yaml
必须位于 main.rs
旁边,并且 data.csv
必须在运行时位于工作目录中。
另一个宏 sanitise!
用于数据已经被解析成正确形状的情况。有关更多详细信息,请参阅文档。
配置
有关配置文件的详细信息,请参阅规范。
可选功能
benchmark
:打印完成各种阶段所需的时间。禁用no_std
支持。你可能不希望这样。
效率
宏为每个列创建线性有限自动机来处理。如果对于特定列将 on-invalid
设置为 average
,则该列的自动机将使用状态机来跟踪有效和无效值。如果忽略列,则不会为其生成自动机。所有数据都存储在原生 Rust 类型中。
许可证
根据以下任一许可证授权:
- Apache 许可证,版本 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
供您选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交并包含在工作中的任何贡献都应作为上述双重许可,不附加任何额外条款或条件。
依赖项
~0.5–1MB
~23K SLoC