#serialization #json-toml #format-file #serde #yaml #toml #json

serde_any

根据运行时选择格式的动态序列化和反序列化

9 个版本 (4 个破坏性版本)

使用旧的 Rust 2015

0.5.0 2018年7月19日
0.4.1 2018年7月2日
0.3.0 2018年6月28日
0.2.1 2018年6月25日
0.1.2 2018年6月19日

#1597编码

Download history 137/week @ 2024-03-14 171/week @ 2024-03-21 213/week @ 2024-03-28 199/week @ 2024-04-04 109/week @ 2024-04-11 172/week @ 2024-04-18 135/week @ 2024-04-25 162/week @ 2024-05-02 86/week @ 2024-05-09 106/week @ 2024-05-16 98/week @ 2024-05-23 128/week @ 2024-05-30 140/week @ 2024-06-06 142/week @ 2024-06-13 157/week @ 2024-06-20 86/week @ 2024-06-27

每月547次下载
13crate中(9 个直接使用)

MIT/Apache

56KB
786

Serde Any

根据运行时选择格式的动态序列化和反序列化。此crate允许您使用 serde 来序列化和反序列化数据,而无需预先选择数据格式。格式可以是运行时选择的、从文件名推断出的,或者通过尝试每个支持的格式直到成功为止。

支持的格式

默认情况下,支持JSON、YAML、TOML、RON、XML和URL编码格式

[dependencies]
serde_any = "0.5"

可以通过功能标志控制支持的格式列表

[dependencies]
serde_any = { version = "0.5", default-features = false, features = ["yaml", "toml"] }

反序列化

实现了 serde::de::Deserialize 的结构体可以从给定的文件反序列化

let m: MyStruct = serde_any::from_file("my_data.json")?;

如果需要支持多种格式,数据可以从一个固定的文件名反序列化。以下将查找 my_data.jsonmy_data.yamlmy_data.ymlmy_data.tomlmy_data.ronmy_data.xml

let m: MyStruct = serde_any::from_file_stem("my_data")?;

也可以使用任何格式从字符串、字节数组或读取器进行反序列化

let m1: MyStruct = serde_any::from_str_any(r#"{"name": "value"}"#)?;
let m2: MyStruct = serde_any::from_slice_any(b"name: value")?;

serde_any crate还提供了具有固定格式的类似反序列化函数

let m1: MyStruct = serde_any::from_str(r#"{"name": "value"}"#, serde_any::Format::Json)?;
let m2: MyStruct = serde_any::from_slice(b"name: value", serde_any::Format::Yaml)?;
let m3: MyStruct = serde_any::from_reader(File::open("some_data_file.toml")?, serde_any::Format::Toml)?;

序列化

实现了 serde::ser::Serialize 的结构体可以序列化到文件

    let m = MyStruct { ... };
    serde_any::to_file("my_data.json")?;

或到字符串、字节数组或写入器,使用固定格式

let m = MyStruct { ... };
let json_string = serde_any::to_string(&m, Format::Json)?;
let yaml_byte_vec = serde_any::to_vec(&m, Format::Yaml)?;

let writer = File::create("some_data_file.toml")?;
serde_any::to_writer(writer, Format::Toml)?;

所有序列化函数都有带有 _pretty 后缀的格式化打印变体。

许可证

以下任一许可证下使用

任选其一。

贡献

除非您明确声明,否则您根据Apache-2.0许可证定义的,有意提交以包含在作品中的任何贡献,应以上述方式双重许可,不得添加任何额外条款或条件。

依赖关系

~1.3–3MB
~68K SLoC