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解析器实现 中排名

Download history 463682/week @ 2024-03-14 469465/week @ 2024-03-21 438765/week @ 2024-03-28 415932/week @ 2024-04-04 424085/week @ 2024-04-11 437186/week @ 2024-04-18 409633/week @ 2024-04-25 392835/week @ 2024-05-02 382258/week @ 2024-05-09 430833/week @ 2024-05-16 399038/week @ 2024-05-23 418523/week @ 2024-05-30 414621/week @ 2024-06-06 418819/week @ 2024-06-13 405174/week @ 2024-06-20 327505/week @ 2024-06-27

1,643,457 每月下载量
2,594 个 crate (315 直接) 中使用

MIT/Apache

140KB
4K SLoC

yaml-rust

Rust 缺失的 YAML 1.2 实现。

Travis AppVeyor crates.io docs.rs

yaml-rust 是一个纯 Rust YAML 1.2 实现,它享受 Rust 语言提供的内存安全等好处。解析器深受 libyamlyaml-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

许可证

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

由您选择。

贡献

在Github上Fork & PR。

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

依赖项