1 个不稳定版本

0.1.3 2024 年 8 月 24 日

#4#path-buf

MIT 许可证

6.5MB
2K SLoC

WPILIB DataLog 格式的 Rust 实现

规范可以在 这里 找到

使用方法

写入

use std::{path::PathBuf, fs:File};
use frclib_datalog::DataLogWriter;
use frclib_core::value::FrcValue;

let path = PathBuf::from("path/to/file");
let reader = DataLogWriter::try_new(File::create(path).unwrap(), Default::default())
        .expect("Failed to create writer");

let entry = writer.get_entry::<i32>("test", None).expect("Failed to get entry");
writer.write_timestamped(entry, 10, now() - 5).expect("Failed to write entry");
writer.write_timestamped(entry, 20, now() + 20).expect("Failed to write entry");
writer.write_timestamped(entry, 30, now() + 50).expect("Failed to write entry");

读取

use std::{path::PathBuf, fs:File};
use frclib_datalog::DataLogReader;
use frclib_core::value::FrcValue;

let path = PathBuf::from("path/to/file");
let reader = DataLogReader::try_new(File::open(path).unwrap(), Default::default())
        .expect("Failed to create reader");

reader.read_entry("entry_name").into_iter().for_each(|value| {
    match value.value {
        FrcValue::Int(i) => println!("Int: {}", i),
        _ => println!("Not an int")
    }
});

基准测试

尚未设置正式的测试,但在我机器(r7 5800x 移动)上,它可以在 0.7 秒内读取和解码 103MB 的文件,在 0.11 秒内读取和解码 17MB 的文件

依赖