ghee_lang/
lib.rs

1use std::collections::BTreeMap;
2
3use nom::{
4    bytes::complete::take_while, character::complete::char, character::is_space,
5    multi::separated_list0, sequence::delimited, IResult,
6};
7
8pub type Record = BTreeMap<Xattr, Value>;
9
10pub fn space(i: &[u8]) -> IResult<&[u8], &[u8]> {
11    take_while(move |x| is_space(x))(i)
12}
13
14pub fn array(i: &[u8]) -> IResult<&[u8], Vec<Value>> {
15    delimited(
16        char('['),
17        separated_list0(
18            char(','),
19            delimited(space, parse_value_not_all_consuming, space),
20        ),
21        char(']'),
22    )(i)
23}
24
25#[test]
26fn test_array() {
27    assert_eq!(
28        array(b"[1,2,3,4]".as_slice()),
29        Ok((
30            b"".as_slice(),
31            vec![1f64, 2f64, 3f64, 4f64]
32                .into_iter()
33                .map(Value::from)
34                .collect()
35        ))
36    );
37    assert_eq!(
38        array(b"[ 1 ,2 , 3, A, \"B\" ,\"C\",Defg]"),
39        Ok((
40            b"".as_slice(),
41            vec![
42                Value::from(1f64),
43                Value::from(2f64),
44                Value::from(3f64),
45                Value::from("A"),
46                Value::from("B"),
47                Value::from("C"),
48                Value::from("Defg")
49            ]
50        ))
51    );
52}
53
54mod assignment;
55mod key;
56mod predicate;
57mod relation;
58mod value;
59mod xattr;
60
61pub use assignment::*;
62pub use key::*;
63pub use predicate::*;
64pub use relation::*;
65pub use value::*;
66pub use xattr::*;