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 在 编码
每月547次下载
在 13 个crate中(9 个直接使用)
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.json
、my_data.yaml
、my_data.yml
、my_data.toml
、my_data.ron
、my_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 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则您根据Apache-2.0许可证定义的,有意提交以包含在作品中的任何贡献,应以上述方式双重许可,不得添加任何额外条款或条件。
依赖关系
~1.3–3MB
~68K SLoC