#yaml-parser #parser #node #directive #atoms #position #tags

no-std yaml-peg

使用贪心解析算法和PEG原子实现的YAML 1.2解析器

41个版本 (9个稳定版)

1.0.8 2024年5月10日
1.0.7 2024年1月12日
1.0.6 2023年9月18日
1.0.5 2022年8月31日
0.12.0 2021年7月26日

#251解析器实现

Download history 108/week @ 2024-04-02 2/week @ 2024-04-16 3/week @ 2024-04-23 252/week @ 2024-04-30 149/week @ 2024-05-07 5/week @ 2024-05-14 11/week @ 2024-05-21 3/week @ 2024-05-28 4/week @ 2024-06-11 1/week @ 2024-06-18 27/week @ 2024-06-25 117/week @ 2024-07-02 1/week @ 2024-07-09

每月146 次下载
2 crates 中使用

MIT 许可证

120KB
2.5K SLoC

yaml-peg

dependency status documentation

使用贪心解析算法和PEG原子实现的YAML 1.2解析器。支持锚点、指令、位置、标签、serde和无std。

灵感来源于yaml-rustserde-yaml

该解析器不保证符合YAML规范,但几乎所有功能都已良好实现。缓冲区读取器尚未实现,但可以通过子解析器读取块。

解析后,加载器可以访问锚点。

use yaml_peg::{parse, node};

let doc = "
---
name: Bob
married: true
age: 46
";
let root = parse(doc).unwrap();
assert_eq!(root, vec![node!({
    "name" => "Bob",
    "married" => true,
    "age" => 46,
})]);

有关更多信息,请参阅API文档。

功能

  • 支持无标准库 #![no_std]

  • 不同的数据持有者 Rc / Arc 提供并行访问和更低的复制成本。

  • 在节点上提供文档位置和标签。

  • 支持锚点/别名。

    • 直接模式:直接嵌入别名。
    • 循环模式:保留别名占位符,用于循环数据。
  • 支持YAML指令 YAMLTAG

    警告: %YAML 1.1 仍将视为1.2。

    %YAML 1.2
    %TAG !x! tag:my.prefix:
    ---
    
  • 支持 serde 以帮助您序列化和反序列化特定类型。(以及非循环锚点)

    use serde::Deserialize;
    use yaml_peg::serde::from_str;
    
    #[derive(Deserialize)]
    struct Member {
       name: String,
       married: bool,
       age: u8,
    }
    
    let doc = "
    ---
    name: Bob
    married: true
    age: 46
    ";
    // Return Vec<Member>, use `.remove(0)` to get the first one
    let officer = from_str::<Member>(doc).unwrap().remove(0);
    assert_eq!("Bob", officer.name);
    assert!(officer.married);
    assert_eq!(46, officer.age);
    

依赖关系

~1MB
~17K SLoC