#name #gedcom #deserialize #genealogy #json #json-xml #serialization

gedcomx

GEDCOM X 格式的核心数据结构和序列化/反序列化

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.12021年5月31日

#526解析器实现


gedcomx_file 中使用

MIT 许可证

445KB
10K SLoC

gedcomx

GEDCOM X 格式的核心数据结构和序列化/反序列化。

CI codecov API

规范符合性

此crate提供了以下GEDCOM X规范的符合性

特性

  • 经过良好测试:数百个单元测试和一些大型集成测试。集成测试了食谱书中所有食谱以及Java Gedcomx 实现中的其他测试数据。
  • Fuzzedquickchecked
  • 使用构建器模式安全地构建GEDCOM X数据模型。
  • 支持XML和JSON序列化和反序列化。

文档

https://docs.rs/gedcomx

用法

将此添加到您的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