4个版本
0.0.4 | 2024年7月20日 |
---|---|
0.0.3 | 2024年5月28日 |
0.0.2 | 2024年5月28日 |
0.0.1 | 2024年4月28日 |
#274 in 解析实现
31,445 每月下载量
在 60 个crate中使用(通过 serde_yml)
530KB
13K SLoC
LibYML(unsafe-libyaml的分支)
这个库是 unsafe-libyaml 的分支,它是从C语言转换到不安全的Rust的libyaml版本,并在 c2rust 的帮助下进行转换。
这个项目已经被重命名为 LibYML,以简化名称并避免与原始的 unsafe-libyaml crate 混淆,该crate现在已存档且不再维护。
致谢和认可
这个库是基于 David Tolnay 和 unsafe-libyaml 库维护者所做出色工作的分支。
LibYML现在已经发展成为一个具有自己目标和方向的独立库,并不打算取代原始的unsafe-libyaml crate。
如果你目前在项目中使用unsafe-libyaml,我们建议你仔细评估你的需求,并考虑原始库的稳定性和成熟度,同时也要看看Rust生态系统中的其他库提供的功能和改进。
我想向 David Tolnay 和 unsafe-libyaml 及 libyaml 的维护者表示衷心的感谢,他们为Rust和C编程社区做出了宝贵的贡献。
[dependencies]
libyml = "0.0.4"
发布说明可在 GitHub发布 中找到。
Rust版本兼容性
这个库与Rust 1.60及以上版本兼容。
特性
- 序列化和反序列化:LibYML提供了易于使用的API,可以将Rust结构体和枚举序列化为YAML格式,并将YAML数据反序列化为Rust类型。
- 自定义结构体和枚举支持:该库允许你处理自定义结构体和枚举,使你的自定义数据类型能够无缝地进行序列化和反序列化。
- 错误处理:LibYML提供了全面的错误处理机制,包括详细的错误消息,以及处理和从解析和生成错误中恢复的能力。
- 流支持:该库支持YAML数据的流式传输,允许您有效地增量处理大型YAML文档。
- 别名和锚支持:LibYML处理YAML别名和锚,使您能够处理涉及引用和重复数据的复杂YAML结构。
- 标签处理:该库提供对自定义标签的支持,允许您使用特定类型信息序列化和反序列化YAML数据。
- 可配置的发射器:LibYML允许您自定义发射器设置,例如缩进、行宽和标量样式,以根据您的喜好生成YAML输出。
- 详尽的文档:该库包含详细的文档和示例,使您能够轻松入门并有效地了解如何使用其各种功能。
- 安全性和效率:LibYML的设计考虑到安全性和效率。它最大限度地减少不安全代码的使用,并提供一个接口,有助于防止常见的陷阱和错误。
示例
要开始使用LibYML,您可以使用项目examples
目录中提供的示例。
LibYML提供了一套全面的示例,以展示其使用和功能。这些示例涵盖了库的各个方面,包括初始化和删除解析器、设置输入字符串、内存管理、字符串操作等。
要运行示例,请克隆存储库并导航到示例目录。每个示例都包含在单独的文件中,专注于特定的功能或用例。
例如,要运行演示LibYML API使用的所有示例,您可以执行以下命令
cargo run --example example
该命令将执行所有示例代码,演示LibYML库的所有功能和用例。
以下是一些您可以单独运行的著名示例
1) apis
示例
api.rs
文件提供了一组用于在LibYML库中处理YAML数据的底层API函数。apis
示例展示了这些低级API的用法,包括以下功能:
yaml_parser_initialize
- 初始化YAML解析器,yaml_parser_delete
- 删除YAML解析器,yaml_parser_set_input_string
- 为解析器设置输入字符串,yaml_malloc
- 分配内存,yaml_realloc
- 重新分配内存,yaml_free
- 释放内存,yaml_strdup
- 复制字符串,yaml_string_extend
- 扩展字符串,yaml_string_join
- 连接字符串,
您可以使用以下命令运行apis
示例
cargo run --example apis
许可证
MIT许可证,与libyaml相同。