13 个版本
0.1.5 | 2023年7月21日 |
---|---|
0.1.4 | 2023年7月21日 |
0.1.3 | 2022年1月18日 |
0.1.1 | 2021年7月7日 |
0.1.0-alpha.1 | 2021年5月31日 |
#526 在 解析器实现
在 gedcomx_file 中使用
445KB
10K SLoC
gedcomx
GEDCOM X 格式的核心数据结构和序列化/反序列化。
规范符合性
此crate提供了以下GEDCOM X规范的符合性
- GEDCOM X XML 1.0完全使用Yaserde进行XML序列化和反序列化实现。
- GEDCOM X JSON 1.0完全使用Serde进行JSON序列化和反序列化实现。
- GEDCOM X Event Types 1.0完全实现。
- GEDCOM X Fact Types 1.0完全实现。
- GEDCOM X Name Part Qualifiers 1.0完全实现。
- GEDCOM X Relationship Types 1.0完全实现。
- GEDCOM X Date 1.0通过gedcomx_date crate符合。
- GEDCOM X Field Types 1.0
- GEDCOM X Record Extensions 1.0
- FamilySearch GEDCOM X 扩展
- GEDCOM X Atom Extensions 1.0
- GEDCOM X RS 1.0
特性
- 经过良好测试:数百个单元测试和一些大型集成测试。集成测试了食谱书中所有食谱以及Java Gedcomx 实现中的其他测试数据。
- Fuzzed和quickchecked。
- 使用构建器模式安全地构建GEDCOM X数据模型。
- 支持XML和JSON序列化和反序列化。
文档
用法
将此添加到您的Cargo.toml
[dependencies]
gedcomx = "0.1"
示例
GEDCOM X文档可以从JSON反序列化。
use gedcomx::Gedcomx;
fn main() {
let json = std::fs::read_to_string("../data/birth.json").unwrap();
let gx = Gedcomx::from_json_str(&json).unwrap();
println!(
"Successfully deserialized GEDCOM X document from JSON with {} people inside!",
gx.persons.len()
);
assert_eq!(gx.persons.len(), 4);
}
同样,您可以使用Gedcomx结构体的from_xml_str
方法从XML反序列化。
内存中的GEDCOM X文档可以通过实例化各个组件并将它们添加到Gedcomx
实例中来构建。然后可以使用在Gedcomx
上定义的一系列函数将其序列化为JSON或XML。
use gedcomx::{Gedcomx, Name, NameForm, NameType, Person};
let gx = Gedcomx::builder()
.person(
Person::builder()
.private(true)
.name(
Name::builder(
NameForm::builder()
.full_text("Jim Halpert")
.lang("en")
.build(),
)
.name_type(NameType::BirthName)
.build(),
)
.build(),
)
.build();
let json = gx.to_json_string_pretty().unwrap();
assert_eq!(json.len(), 285);
贡献
请参阅设计文档以获取有关各种选择原因的更多信息。欢迎提交PR!
依赖项
~4–5.5MB
~101K SLoC