4个版本 (破坏性更新)
0.4.0 | 2023年10月2日 |
---|---|
0.3.0 | 2023年9月29日 |
0.2.0 | 2023年9月29日 |
0.1.0 | 2023年9月29日 |
#1996 in 编码
每月下载量 21次
16KB
350 行
Serdeio
为Rust编写的轻量级IO工具库,用于序列化和反序列化Serde兼容的结构体
安装
cargo add serdeio
Serdeio支持JSON和JSON Lines格式。通过启用相应的功能,可以支持其他格式。
yaml
csv
使用方法
read_record_from_reader
用于从std::io::Read
读取可反序列化类型Vec<T>
。必须通过DataFormat
枚举指定数据格式。read_records_from_reader
总是尝试将数据反序列化为Vec<T>
。read_record_from_file
接受一个AsRef<Path>
。数据格式将自动通过文件扩展名确定。write_*
函数遵循与read_*
相同的规则。
请注意,某些数据格式(如CSV和JSON Lines)仅支持读取记录 Vec<T>
。
示例
以下代码读取一个JSON文件,并将其解析为 Vec<User>
。然后它将数据编码为YAML格式,并将其写入STDOUT。
use anyhow::{anyhow, Context, Result as AnyResult};
use serde::{Deserialize, Serialize};
use serdeio::{read_record_from_file, write_records_to_writer, DataFormat};
#[derive(Debug, Deserialize, Serialize)]
struct User {
id: u32,
name: String,
items: Vec<String>,
}
pub fn main() -> AnyResult<()> {
// get input file path from argv
let args: Vec<String> = std::env::args().collect();
let input_file_path = &args[1];
// read json file to memory
let users: Vec<User> = read_record_from_file(input_file_path)
.context("Failed to read records from file")?;
// write to stdout in json lines format
let writer = std::io::stdout();
write_records_to_writer(writer, DataFormat::JsonLines, &users).unwrap();
Ok(())
}
依赖项
~0.8–2.1MB
~44K SLoC