#serde #io #yaml #csv #json #json-file #io-util

serdeio

为Rust编写的轻量级IO工具库,用于序列化和反序列化Serde兼容的结构体

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次

MIT 许可证

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