#yaml-parser #pure #compliant #events #hash-map #benefits #suite

bin+lib yaml-rust2

完全符合 YAML 1.2 规范的 YAML 解析器

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编码

Download history 16549/week @ 2024-05-02 20657/week @ 2024-05-09 15374/week @ 2024-05-16 16405/week @ 2024-05-23 17736/week @ 2024-05-30 17199/week @ 2024-06-06 19506/week @ 2024-06-13 19029/week @ 2024-06-20 17704/week @ 2024-06-27 19412/week @ 2024-07-04 21353/week @ 2024-07-11 20269/week @ 2024-07-18 24198/week @ 2024-07-25 23552/week @ 2024-08-01 25449/week @ 2024-08-08 22313/week @ 2024-08-15

100,393 每月下载量
46 个crate中使用 (20 直接使用)

MIT/Apache

190KB
4.5K SLoC

yaml-rust2

yaml-rust2 是一个纯 Rust 编写的完全符合 YAML 1.2 规范的实现。

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

许可证

根据您选择的以下之一获得许可:

任选其一。

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

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

贡献

Fork 此存储库在 Github 上创建一个拉取请求。您可能需要点击“跨分叉比较”并选择您的分叉分支。请确保将 Ethiraric 作为基础存储库选择,而不是 chyh1990

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

依赖项

~1.6–2.8MB
~59K SLoC