Crates.io | yaml-peg |
lib.rs | yaml-peg |
version | 1.0.8 |
source | src |
created_at | 2021-06-03 10:51:42.603099 |
updated_at | 2024-05-10 09:32:34.883404 |
description | A YAML 1.2 parser using a greedy parsing algorithm with PEG atoms. |
homepage | |
repository | https://github.com/KmolYuan/yaml-peg-rs |
max_upload_size | |
id | 405644 |
size | 121,986 |
A YAML 1.2 parser using a greedy parsing algorithm with PEG atoms. Support anchors, directives, positions, tags, serde, and no-std.
Inspired from yaml-rust
and serde-yaml
.
This parser is not ensure about YAML spec but almost functions are well-implemented. The buffer reader has also not yet been implemented, but the chunks can be read by the sub-parsers.
The anchors can be visited by the loader after parsing.
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,
})]);
See the API doc for more information.
Support no standard library #![no_std]
.
Different data holder Rc
/ Arc
provides parallel visiting and less copy cost.
Provide document positions and tags on the nodes.
Support anchors / alias.
Support YAML directives YAML
and TAG
.
WARNING: %YAML 1.1
will still be treated as 1.2.
%YAML 1.2
%TAG !x! tag:my.prefix:
---
Support serde
to help you serialize and deserialize a specific type. (as well as the non-cyclic anchors)
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);