14 个版本
0.4.5 | 2021 年 1 月 3 日 |
---|---|
0.4.4 | 2020 年 6 月 1 日 |
0.4.3 | 2019 年 3 月 7 日 |
0.4.2 | 2018 年 9 月 15 日 |
0.2.1 | 2015 年 7 月 2 日 |
2147 在 解析器实现 中排名
1,643,457 每月下载量
在 2,594 个 crate (315 直接) 中使用
140KB
4K SLoC
yaml-rust
Rust 缺失的 YAML 1.2 实现。
yaml-rust
是一个纯 Rust YAML 1.2 实现,它享受 Rust 语言提供的内存安全等好处。解析器深受 libyaml
和 yaml-cpp
的影响。
快速入门
将以下内容添加到您的项目的 Cargo.toml 中
[dependencies]
yaml-rust = "0.4"
并导入
extern crate yaml_rust;
使用 yaml::YamlLoader
加载 YAML 文档并将其作为 Vec/HashMap 访问
extern crate yaml_rust;
use yaml_rust::{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);
// Chained key/array access is checked and won't panic,
// return BadValue if they are not exist.
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_rust::Yaml
实现了 Index<&'a str>
& Index
Index
假设容器是一个数组Index<&'a str>
假设容器是一个字符串到值映射- 否则,返回
yaml_rust::Yaml::BadValue
如果您的文档不符合此约定(例如具有复杂类型键的映射),您可以使用 Yaml::as_XXX
系列API访问您的文档。
特性
- 纯 Rust
- Ruby风格的数组/哈希访问API
- 低级YAML事件发射
规范符合性
本实现旨在提供与YAML 1.2规范完全兼容的YAML解析器。解析器可以正确解析规范中的几乎所有示例,但以下已知问题除外
- 某些上下文中的空纯标量
然而,广泛使用的库libyaml
也无法解析这些示例,所以对于大多数用户来说,这可能不是一个大问题。
目标
- 编码器
- 标签指令
- 反序列化时的别名
Rust最低版本策略
本软件包最低支持的rustc
版本是1.31(与Rust 2018一同发布,在v0.4.3之后),这也是目前已知的最小版本,如regex
。
许可证
根据您的要求,许可为以下之一
- Apache License,版本2.0(LICENSE-APACHE或http://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
由您选择。
贡献
在Github上Fork & PR。
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,都应按照上述方式双许可,不附加任何额外的条款或条件。