3 个版本 (破坏性更新)
0.3.0 | 2024 年 4 月 14 日 |
---|---|
0.2.0 | 2024 年 3 月 8 日 |
0.1.0 | 2024 年 2 月 18 日 |
在 Rust 模式 中排名第 848
18KB
384 行
ex_em_ell
ex_em_ell
是一个基于出色的 xml-rs
库的具有观点的 XML 库。它提供从/to 特性和 derive 宏,以减少使用底层库时所需的样板代码。
项目状态
该项目目前处于 alpha 阶段,API 预计在达到 1.x.y 版本之前会经历几轮迭代。在其当前状态下,它是基于特定项目需求而非特定路线图进行开发的。
目的
如上所述,ex_eml_ell
是一个具有观点的库,它导致没有其他库完全符合特定的利基用例。如果那些库符合您的用例,它们可能比这个项目更加完善和精致,所以我们建议您使用它们。
可出错解析
在编写此库时,许多适合我们用例的解析器要求您的类型实现 Default
,并且会自动用默认值填充您的类型的实例。我们需要一个能够
- 在缺少必需字段时失败
- 生成可以用于跟踪 XML 结构中缺少的字段的精确路径的错误消息(例如,
data > components > 1 > component 缺少 "name" 字段
比仅expected "name" field
的错误消息更有助于用户)
不基于 Serde 构建
由于XML超出了serde
设计的常规模式,尝试与serde
集成的库会使用诸如#[serde(rename = "@attribute")
这样的东西来指定用于读取/写入文档的特定XML结构。这在仅用于XML的类型的情况下很有用,但我们的用例需要类型能够解析XML和JSON文档。我们使用serde
处理JSON,并使用这个库处理XML
。
使用方法
该crate提供了一些特性和相应的derive宏。其中最值得注意的是FromXmlDocument
/ToXmlDocument
和FromXmlElement
/ToXmlElement
。具有以下定义的结构体将对应以下XML:
#[derive(ex_em_ell::FromXmlDocument, ex_em_ell::ToXmlDocument)]
struct Example {
#[ex_em_ell(rename = "type")]
example_type: String,
child: ExampleChild,
}
#[derive(ex_em_ell::FromXmlElement, ex_em_ell::ToXmlElement)]
struct ExampleChild {
field: String,
}
...
<example>
<type>example value</type>
<child>
<field>example field value</field>
</child>
</example>
许可证
本项目采用MIT许可证或Apache-2.0许可证的双重许可方式。这是为了与更广泛的Rust社区兼容。
依赖关系
~1–1.6MB
~33K SLoC