3 个版本 (重大更新)
0.3.0 | 2020 年 8 月 31 日 |
---|---|
0.2.0 | 2020 年 8 月 31 日 |
0.1.0 | 2020 年 8 月 31 日 |
#2114 in 编码
每月下载 448 次
用于 4 个crate
32KB
598 行
vdf-serde
为 Valve 数据格式 提供对 Serde 的支持。
基于 steamy-vdf VDF 解析库。
使用方法
将以下内容添加到您的 Cargo.toml
[dependencies]
vdf-serde = "0.3.0"
简单示例
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct Example {
thing: String,
other_thing: bool,
more_stuff: Inner,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct Inner {
bonus_content: u8,
coolness: f64,
}
let vdf_data = "\"Example\"
{
\t\"thing\"\t\"hello\"
\t\"other_thing\"\t\"1\"
\t\"more_stuff\"
\t{
\t\t\"bonus_content\"\t\"69\"
\t\t\"coolness\"\t\"420.1337\"
\t}
}";
let data = Example {
thing: "hello".to_string(),
other_thing: true,
more_stuff: Inner {
bonus_content: 69,
coolness: 420.1337,
},
};
assert_eq!(vdf_serde::to_string(&data)?, vdf_data);
assert_eq!(vdf_serde::from_str::<Example>(vdf_data)?, data);
说明
由于 VDF 格式定义得相当不明确,因此在我找到一种兼容现有 VDF 文件的方法之前,以下来自 Serde 数据模型 的类型不受支持
- 字节数组
- 可选
- 单元
()
- 单元结构
struct WillNotWork;
- 新类型变体
enum Broken { Example(u8) }
- 序列
Vec<T>
- 元组
- 元组结构
struct Unsupported(u8, bool, char);
- 元组变体
enum Bad { NotWorking(u8, bool, char) }
- 结构变体
enum Nope { NotHappening { datum: u8 } }
如果您使用此类功能,可能需要自己实现 Serialize 和 Deserialize。尽管如此,Serde 数据模型的其余部分仍然正常工作,尽管使用非原子键的映射可能会有些混乱。
use std::collections::HashMap as Map;
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize, Debug, PartialEq)]
enum UnitVariants { A, B }
#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct NewtypeStruct(u8);
#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct KitchenSink {
a: bool,
b: i8,
c: i16,
d: i32,
e: i64,
f: u8,
g: u16,
h: u32,
i: u64,
j: f32,
k: f64,
l: char,
m: String,
n: UnitVariants,
o: NewtypeStruct,
p: Map<String, String>,
}
let data = KitchenSink { // yada yada yada
};
assert_eq!(data, vdf_serde::from_str(&vdf_serde::to_string(&data)?)?);
许可证
根据以下任一许可证授权:
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确表示,否则根据 Apache-2.0 许可证定义的任何有意提交的工作贡献,将按上述方式双许可,不附加任何额外的条款或条件。
历史
v0.3.0 - 2020-08-31
- 使用顶级 newtype 附带的名称
v0.2.0 - 2020-08-31
- 更有用的错误
- 如果反序列化后的文本全部为空白,则不报错
v0.1.0 - 2020-08-31
- 首次发布
依赖项
~1–1.7MB
~37K SLoC