2 个版本

0.0.1 2024 年 4 月 2 日
0.0.0 2024 年 4 月 2 日

#28#compliant

Download history 37/week @ 2024-04-06 22/week @ 2024-04-13 8/week @ 2024-04-20 231/week @ 2024-04-27 477/week @ 2024-05-04 654/week @ 2024-05-11 409/week @ 2024-05-18 1248/week @ 2024-05-25 847/week @ 2024-06-01 754/week @ 2024-06-08 826/week @ 2024-06-15 830/week @ 2024-06-22 767/week @ 2024-06-29 924/week @ 2024-07-06 718/week @ 2024-07-13 762/week @ 2024-07-20

3,227 每月下载量
用于 2 crates

MIT/Apache

52KB
916

saphyr

saphyr 是一个完全符合 YAML 1.2 规范的纯 Rust 库。

此作品基于 yaml-rust,针对 YAML 测试套件 进行了修复。 yaml-rust 的解析器受到了 libyamlyaml-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测试套件进行测试。

许可

根据您的要求,许可为以下之一

任选其一。

由于此存储库最初由 chyh1990 维护,存在两套许可。重新分发时必须包含每套许可中的许可。有关更多详细信息,请参阅LICENSE 文件。

您可以在 .licenses 子目录中找到许可。

贡献

在GitHub上fork此存储库在GitHub上创建拉取请求。您可能需要点击“跨分支比较”并选择您的分支。

除非您明确表示,否则,根据Apache-2.0许可定义,您有意提交以包含在作品中的任何贡献,都将按照上述方式双许可,不附加任何额外条款或条件。

依赖项

~1.8–3MB
~63K SLoC