12 个版本 (6 个破坏性更新)

0.7.1 2024 年 7 月 1 日
0.6.1 2024 年 6 月 21 日
0.4.0 2024 年 3 月 26 日
0.2.0 2021 年 9 月 4 日
0.1.0 2020 年 1 月 31 日

#318解析器实现

Download history 109/week @ 2024-05-03 49/week @ 2024-05-10 227/week @ 2024-05-17 295/week @ 2024-05-24 1339/week @ 2024-05-31 267/week @ 2024-06-07 277/week @ 2024-06-14 738/week @ 2024-06-21 406/week @ 2024-06-28 263/week @ 2024-07-05 34/week @ 2024-07-12 165/week @ 2024-07-19 383/week @ 2024-07-26 118/week @ 2024-08-02 149/week @ 2024-08-09 175/week @ 2024-08-16

每月 934 次下载
用于 8 个crate (5 个直接使用)

MIT 许可证

125KB
2.5K SLoC

Marked YAML

此库建立在 yaml-rust2 之上,提供包含数据来源标记的 YAML AST。它显式地在低级别操作,仅提供 基础 安全 YAML 类型(即原生的标签 tag:yaml.org,2002:seqtag:yaml.org,2002:maptag:yaml.org,2002:str

支持的 YAML 子集被有意限制,以便使用此crate的用户会无意中劝阻复杂的使用 YAML,这难以管理用户的期望。例如,此 crate 中的映射类型显式地仅允许标量作为键,并且由于所有标量都被视为字符串,映射始终具有字符串键。

此类 YAML 数据表示的主要价值在于允许希望非常明确地表示输入来源的应用程序有机会以正常 YAML 解析器不允许的方式做到这一点。

使用 Marked YAML

目前此库仅支持从字符串加载 YAML,但这对于大多数用户的目的来说已经足够了。无论如何,我们不推荐用于大量数据的非流式处理引擎。

要加载一些 YAML,您只需

let node = marked_yaml::parse_yaml(0, r#"
toplevel: must be a mapping
but:
 - it
 - may
 - contain lists
and:
 mappings: are permitted
 as: sub-mappings
"#);
assert!(node.is_ok());

解析有效的 YAML 文件可能会失败,因为 marked_yaml 添加了一些额外的约束

  • YAML 的顶层必须是映射或序列之一。这是由加载器选项控制的。
  • 映射键必须是标量(字符串)。
  • 别名和锚点不允许使用(尽管这种限制可能在将来取消)。

此外,您可以在 marked_yaml::Nodeyaml_rust::Yaml 之间进行转换,但这不会给您带来任何有用的标记。

依赖项

~2.5MB
~36K SLoC