lsdata 0.2.0

LSD (Less Syntax Data) configuration/data transfer format.
Documentation
use std::io::Cursor;

use lsdata::key;
use lsdata::LSDGetExt;
use lsdata::LSD;

#[test]
fn parse() {
    let text = Cursor::new("a 10");

    let lsd = LSD::parse(text).unwrap();

    assert_eq!(
        lsd.parsed::<u8, _>(|| (), key!["a"])
            .unwrap()
            .unwrap(),
        10
    );
}

#[test]
fn level() {
    let text = Cursor::new("a { b 10 }");

    let lsd = LSD::parse(text).unwrap();

    assert_eq!(
        lsd.level(|| (), key!["a"])
            .unwrap()
            .unwrap()
            .get("b")
            .unwrap(),
        LSD::Value("10".to_string())
    );
    assert_eq!(
        lsd.value(|| (), key!["a" "b"])
            .unwrap()
            .unwrap(),
        "10"
    );
}

#[test]
fn list() {
    let text = Cursor::new("a [ 10 ]");

    let lsd = LSD::parse(text).unwrap();

    assert_eq!(
        lsd.list(|| (), key!["a"])
            .unwrap()
            .unwrap()[0],
        LSD::Value("10".to_string())
    );
    assert_eq!(
        lsd.value(|| (), key!["a" 0])
            .unwrap()
            .unwrap(),
        "10"
    );
}

#[test]
fn nested() {
    let text = Cursor::new("a [ { a 10 } ]");

    let lsd = LSD::parse(text).unwrap();

    assert_eq!(
        lsd.value(|| (), key!["a" "0" "a"])
            .unwrap()
            .unwrap(),
        "10"
    );
}

#[test]
fn dynamic() {
    let text = Cursor::new(
        r#"
            a [
                10
                20
            ]
        "#,
    );

    let lsd = LSD::parse(text).unwrap();

    let id = 1;
    assert_eq!(
        lsd.value(|| (), key!["a" id])
            .unwrap()
            .unwrap(),
        "20"
    );
}

#[test]
fn syntaxes() {
    let text = Cursor::new("a { b 10 }");

    let lsd = LSD::parse(text).unwrap();

    assert_eq!(
        lsd.value(|| (), key!["a" "b"])
            .unwrap()
            .unwrap(),
        "10"
    );
    assert_eq!(
        lsd.value(|| (), key!["a"."b"])
            .unwrap()
            .unwrap(),
        "10"
    );
    assert_eq!(
        lsd.value(|| (), key!["a", "b"])
            .unwrap()
            .unwrap(),
        "10"
    );
    assert_eq!(
        lsd.value(|| (), key!["a"; "b"])
            .unwrap()
            .unwrap(),
        "10"
    );
}