2 个版本
0.0.1 | 2024 年 4 月 2 日 |
---|---|
0.0.0 | 2024 年 4 月 2 日 |
#28 在 #compliant
3,227 每月下载量
用于 2 crates
52KB
916 行
saphyr
saphyr 是一个完全符合 YAML 1.2 规范的纯 Rust 库。
此作品基于 yaml-rust
,针对 YAML 测试套件 进行了修复。 yaml-rust
的解析器受到了 libyaml
和 yaml-cpp
的影响。
saphyr
是一个纯 Rust YAML 1.2 实现,利用了 Rust 语言提供的内存安全和其他优点。
快速开始
安装
将以下内容添加到您的 Cargo.toml 中
[dependencies]
saphyr = "0.0.1"
或使用 cargo add
自动获取最新版本
cargo add saphyr
示例
使用 saphyr::YamlLoader
加载 YAML 文档并将它们作为 Yaml
对象访问
use saphyr::{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);
}
请注意,saphyr::Yaml
实现了 Index<&'a str>
和 Index<usize>
Index<usize>
假设容器是一个数组Index<&'a str>
假设容器是一个字符串到值映射- 否则,将返回
Yaml::BadValue
如果您的文档不遵循此约定(例如,具有复杂类型的键的地图),您可以使用 Yaml::as_XXX
系列函数API来访问您的对象。
功能
- 纯Rust
Vec
/HashMap
访问API
安全性
此库不会尝试解释YAML文档中的任何类型说明符,因此不会存在通过解析YAML文档来实例化套接字并与其他外部世界进行通信的风险。
规范兼容性
此实现完全符合YAML 1.2规范。此库背后的解析器(saphyr-parser
)针对(并通过)了YAML测试套件进行测试。
许可
根据您的要求,许可为以下之一
- Apache License,版本2.0(http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可(http://opensource.org/licenses/MIT)
任选其一。
由于此存储库最初由 chyh1990 维护,存在两套许可。重新分发时必须包含每套许可中的许可。有关更多详细信息,请参阅LICENSE 文件。
您可以在 .licenses
子目录中找到许可。
贡献
在GitHub上fork此存储库 并 在GitHub上创建拉取请求。您可能需要点击“跨分支比较”并选择您的分支。
除非您明确表示,否则,根据Apache-2.0许可定义,您有意提交以包含在作品中的任何贡献,都将按照上述方式双许可,不附加任何额外条款或条件。
链接
依赖项
~1.8–3MB
~63K SLoC