9 个版本
0.6.4 | 2024年3月20日 |
---|---|
0.6.3 | 2024年3月20日 |
0.6.0 | 2024年1月29日 |
0.5.2 | 2023年7月23日 |
0.4.5 | 2021年3月21日 |
#36 in #yaml-parser
每月480次下载
在 31 个crate中(直接使用3个)使用
155KB
4.5K SLoC
开发已转移到 yaml-rust2
重要 此分支的所有增强功能已合并到 yaml-rust2,这是事实上的Rust YAML实现。
所有未来的开发都转移到 yaml-rust2
。建议用户升级到 yaml-rust2
。
升级到 yaml-rust2
您可以通过将项目 Cargo.toml
中的 package
选项设置为 yaml-rust2
,将 yaml-rust2 作为 yaml-rust
的直接替换使用。
[dependencies]
yaml-rust = { version = "0.7", package = "yaml-rust2" }
以下为 yaml-rust-davvid 的原始 README
yaml-rust
Rust 中缺失的 YAML 1.2 实现。
yaml-rust
是一个纯Rust YAML 1.2 实现,它享有Rust语言提供的内存安全属性和其他好处。解析器深受 libyaml
和 yaml-cpp
的影响。
快速开始
将以下内容添加到项目的 Cargo.toml 中
[dependencies]
yaml-rust = { version = "0.6", package = "yaml-rust-davvid" }
使用 yaml::YamlLoader
加载 YAML 文档并将其作为 Vec/HashMap 访问
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,
// returns BadValue if the key does 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<usize>
Index<usize>
假设容器是一个数组Index<&'a str>
假设容器是一个字符串到值的映射- 否则,返回
Yaml::BadValue
如果你的文档不符合此约定(例如具有复杂类型的映射),你可以使用 Yaml::as_XXX
系列API来访问你的文档。
特性
- 纯Rust
- 类似Ruby的数组/哈希访问API
- 低级YAML事件发射
规范兼容性
此实现旨在提供完全兼容YAML 1.2规范的YAML解析器。解析器可以正确解析规范中的几乎所有示例,除了以下已知的错误
- 某些上下文中的空普通标量
然而,广泛使用的库 libyaml
也无法解析这些示例,因此这可能对大多数用户不是一个大问题。
安全性
此库不试图解释YAML文档中的任何类型说明符,因此没有通过解析YAML文档实例化套接字并与外部世界通信的风险。
目标
- 编码器
- 标签指令
- 反序列化时别名
最小Rust版本策略
此crate支持的最小 rustc
版本为1.31(与Rust 2018一起发布,在v0.4.3之后),因为这也是当前已知的 regex
的最低版本。
许可
许可方式为以下之一
- Apache License,版本2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
在Github上Fork & PR。
除非你明确声明,否则任何有意提交以包含在你的作品中的贡献,根据Apache-2.0许可定义,将按上述方式双重许可,不附加任何额外条款或条件。
致谢
yaml-rust-davvid
是由 chyh1990 开发的原始、现在不再维护的 yaml-rust 解析器的分支。
依赖项
~4MB
~59K SLoC