yscl/lib.rs
1//! A fast and simple parser for [YSCL](https://github.com/kylejlin/yscl).
2//!
3//! ## Example
4//! ```rust
5//! use yscl::prelude::*;
6//!
7//! let map = parse_doc(r#"
8//! kantu_version = "1.0.0"
9//! name = "fibonacci"
10//! license = [
11//! "MIT"
12//! "Apache-2.0"
13//! ]
14//! dependencies = {
15//! yscl = "1.0.0"
16//! json = "1.0.0"
17//! }
18//! author = "xeklan (黒🐑)"
19//! "#).unwrap();
20//!
21//! let expected = Map {
22//! entries: vec![
23//! MapEntry {
24//! key: Identifier::new("kantu_version".to_owned()).unwrap(),
25//! value: Node::Atom(
26//! Atom {
27//! value: "1.0.0".to_owned(),
28//! },
29//! ),
30//! },
31//! MapEntry {
32//! key: Identifier::new("name".to_owned()).unwrap(),
33//! value: Node::Atom(
34//! Atom {
35//! value: "fibonacci".to_owned(),
36//! },
37//! ),
38//! },
39//! MapEntry {
40//! key: Identifier::new("license".to_owned()).unwrap(),
41//! value: Node::List(
42//! List {
43//! elements: vec![
44//! Node::Atom(
45//! Atom {
46//! value: "MIT".to_owned(),
47//! },
48//! ),
49//! Node::Atom(
50//! Atom {
51//! value: "Apache-2.0".to_owned(),
52//! },
53//! ),
54//! ],
55//! },
56//! ),
57//! },
58//! MapEntry {
59//! key: Identifier::new("dependencies".to_owned()).unwrap(),
60//! value: Node::Map(
61//! Map {
62//! entries: vec![
63//! MapEntry {
64//! key: Identifier::new("yscl".to_owned()).unwrap(),
65//! value: Node::Atom(
66//! Atom {
67//! value: "1.0.0".to_owned(),
68//! },
69//! ),
70//! },
71//! MapEntry {
72//! key: Identifier::new("json".to_owned()).unwrap(),
73//! value: Node::Atom(
74//! Atom {
75//! value: "1.0.0".to_owned(),
76//! },
77//! ),
78//! },
79//! ],
80//! },
81//! ),
82//! },
83//! MapEntry {
84//! key: Identifier::new("author".to_owned()).unwrap(),
85//! value: Node::Atom(
86//! Atom {
87//! value: "xeklan (黒🐑)".to_owned(),
88//! },
89//! ),
90//! },
91//! ],
92//! };
93//!
94//! assert_eq!(expected, map);
95//! ```
96
97#[macro_use]
98pub mod macros;
99
100pub mod parse;
101pub mod tree;
102
103pub mod prelude {
104 pub use crate::{macros::*, parse::*, tree::*};
105
106 pub use crate::yscl_node;
107}
108
109#[cfg(test)]
110mod tests;