1个不稳定版本
0.1.0 | 2022年1月15日 |
---|
#1427 in 编码
59KB
2K SLoC
serde_kicad_sexpr
此crate提供了用于KiCAD使用的S-表达式数据格式的serde Serializer
和Deserializer
实现。由于此格式在某些核心方面与其他格式(如JSON)不同,因此存在一些限制和特殊案例,您应该注意
-
您的结构体名称很重要。对于一个简单的结构体,例如
#[derive(Deserialize, Serialize)] struct Point(i32, i32);
和示例值
Point(1, 2)
,您将得到一个JSON表示形式为[1, 2]
的JSON表示,而此crate将输出(Point 1 2)
。 -
如果字段的类型是布尔值、元组或序列,则字段名称也很重要。这些字段不能出现在无名称的容器中(即元组结构体)。
-
不支持反序列化
Option
,因为我们需要知道选项内部的数据类型以确定它是否存在或不存在。要反序列化可选值,请使用此crate提供的自定义反序列化逻辑#[derive(Deserialize, Serialize)] struct Position { x: i32, y: i32, #[serde(with = "serde_kicad_sexpr::Option")] rotation: Option<i32> }
-
如果您需要反序列化某种具有未知子项数量的容器,请使用具有空名称的特殊字段,如下所示
#[derive(Deserialize, Serialize)] struct Point(i32, i32); #[derive(Deserialize, Serialize)] struct Polygon { #[serde(default, rename = "")] points: Vec<Point> }
请注意,这必须是结构体的最后一个字段。在具有空名称的字段之后不得有任何字段,并且只能有一个具有空名称的字段。
-
不支持未标记的枚举。如果您需要从多种类型中解析一个,请使用
untagged!
宏serde_kicad_sexpr::untagged! { enum TextOrNumber { Text(String), Int(i32), Float(f32) } }
许可证
根据您的选择,本软件许可协议适用于Apache许可证版本2.0或GNU通用公共许可证版本3.0。
除非您明确表示,否则您根据Apache-2.0许可证定义的贡献,有意提交给本软件包的,将按上述方式双重许可,无需附加条款或条件。
依赖项
~0.4–1.6MB
~35K SLoC