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

Download history 253/week @ 2024-03-11 605/week @ 2024-03-18 136/week @ 2024-03-25 226/week @ 2024-04-01 94/week @ 2024-04-08 156/week @ 2024-04-15 159/week @ 2024-04-22 190/week @ 2024-04-29 136/week @ 2024-05-06 101/week @ 2024-05-13 93/week @ 2024-05-20 140/week @ 2024-05-27 119/week @ 2024-06-03 135/week @ 2024-06-10 105/week @ 2024-06-17 117/week @ 2024-06-24

每月480次下载
31 个crate中(直接使用3个)使用

MIT/Apache

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 实现。

Build status crates.io docs.rs

yaml-rust 是一个纯Rust YAML 1.2 实现,它享有Rust语言提供的内存安全属性和其他好处。解析器深受 libyamlyaml-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 的最低版本。

许可

许可方式为以下之一

任选其一。

贡献

在Github上Fork & PR。

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

致谢

yaml-rust-davvid 是由 chyh1990 开发的原始、现在不再维护的 yaml-rust 解析器的分支。

依赖项

~4MB
~59K SLoC