5 个版本 (3 个破坏性更改)
0.8.1 | 2024年5月31日 |
---|---|
0.8.0 | 2024年3月26日 |
0.7.0 | 2024年3月20日 |
0.6.0 | 2024年3月15日 |
0.5.0 | 2024年2月8日 |
#322 在 编码
100,393 每月下载量
在 46 个crate中使用 (20 直接使用)
190KB
4.5K SLoC
yaml-rust2
yaml-rust2 是一个纯 Rust 编写的完全符合 YAML 1.2 规范的实现。
该作品基于 yaml-rust
,并针对符合 YAML 测试套件 进行了修复。 yaml-rust
的解析器受到 libyaml
和 yaml-cpp
的很大影响。
yaml-rust2
是一个纯 Rust YAML 1.2 实现,它利用了 Rust 语言的内存安全和其他好处。
快速入门
将以下内容添加到您的项目的 Cargo.toml 中
[dependencies]
yaml-rust2 = "0.8"
使用 yaml_rust2::YamlLoader
加载 YAML 文档,并以 Yaml
对象的形式访问它们
use yaml_rust2::{YamlLoader, YamlEmitter};
fn main() {
let s =
"
foo:
- list1
- list2
bar:
- 1
- 2.0
";
let docs = YamlLoader::load_from_str(s).unwrap();
// Multi document support, doc is a yaml::Yaml
let doc = &docs[0];
// Debug support
println!("{:?}", doc);
// Index access for map & array
assert_eq!(doc["foo"][0].as_str().unwrap(), "list1");
assert_eq!(doc["bar"][1].as_f64().unwrap(), 2.0);
// Array/map-like accesses are checked and won't panic.
// They will return `BadValue` if the access is invalid.
assert!(doc["INVALID_KEY"][100].is_badvalue());
// Dump the YAML object
let mut out_str = String::new();
{
let mut emitter = YamlEmitter::new(&mut out_str);
emitter.dump(doc).unwrap(); // dump the YAML object to a String
}
println!("{}", out_str);
}
请注意,yaml_rust2::Yaml
实现了 Index<&'a str>
和 Index<usize>
Index<usize>
假设容器是一个数组Index<&'a str>
假设容器是一个字符串到值映射- 否则,将返回
Yaml::BadValue
如果您的文档不符合此约定(例如具有复杂类型键的映射),您可以使用 Yaml::as_XXX
系列函数 API 访问您的对象。
功能
- 纯 Rust
Vec
/HashMap
访问 API- 低级别 YAML 事件发射
安全性
此库不会尝试解释 YAML 文档中的任何类型说明符,因此不会存在通过解析 YAML 文档仅用字段实例化套接字并与外部世界通信的风险。
规范合规性
此实现完全符合 YAML 1.2 规范。为了帮助合规,yaml-rust2
对 (并通过) YAML 测试套件 进行测试。
从 yaml-rust 升级
您可以将 yaml-rust2
作为原始 yaml-rust
crate 的直接替代品使用。
[dependencies]
yaml-rust = { version = "#.#", package = "yaml-rust2" }
此 Cargo.toml
声明允许您在代码中将此 crate 引用为 yaml_rust
。
use yaml_rust::{YamlLoader, YamlEmitter};
许可证
根据您选择的以下之一获得许可:
- Apache 许可证 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (http://opensource.org/licenses/MIT)
任选其一。
由于此存储库最初由 chyh1990 维护,存在两套许可证。重新分配必须包含每套许可证中的一个。有关详细信息,请参阅 LICENSE 文件。
您可以在 .licenses
子目录中找到许可证。
贡献
Fork 此存储库 并 在 Github 上创建一个拉取请求。您可能需要点击“跨分叉比较”并选择您的分叉分支。请确保将 Ethiraric
作为基础存储库选择,而不是 chyh1990
。
除非您明确声明,否则您提交的任何有意包含在作品中的贡献,根据 Apache-2.0 许可证的定义,应按照上述方式双重许可,不附加任何额外条款或条件。
链接
依赖项
~1.6–2.8MB
~59K SLoC