nest 1.0.0

Use your filesystem as a nested data store
extern crate assert_fs;

use std::convert::TryInto;

use assert_fs::prelude::*;
use serde_json::json;

use nest;

mod common;

#[test]
fn hjson() {
    common::setup();

    let temp = assert_fs::TempDir::new().unwrap();
    let file = temp.child("hello/world.hjson");

    file.write_str(
        r#"{
  "nest": true
}"#,
    )
    .unwrap();

    let schema = json!({ "hello": { "world": "hjson" } }).try_into().unwrap();
    let store = nest::Store::new(temp.path(), schema);

    assert_eq!(
        store.get(&["hello", "world", "nest"]).unwrap(),
        json!(true).into(),
    );

    assert_eq!(
        store
            .set(&["hello", "world", "nest"], &json!(false).into())
            .unwrap(),
        (),
    );

    file.assert(
        r#"{
  nest: false
}"#,
    );

    temp.close().unwrap();
}

#[test]
fn yaml() {
    common::setup();

    let temp = assert_fs::TempDir::new().unwrap();
    let file = temp.child("hello/world.yaml");

    file.write_str(
        r#"
nest: true
"#,
    )
    .unwrap();

    let schema = json!({ "hello": { "world": "yaml" } }).try_into().unwrap();
    let store = nest::Store::new(temp.path(), schema);

    assert_eq!(
        store.get(&["hello", "world", "nest"]).unwrap(),
        json!(true).into(),
    );

    assert_eq!(
        store
            .set(&["hello", "world", "nest"], &json!(false).into())
            .unwrap(),
        (),
    );

    file.assert(
        r#"---
nest: false
"#,
    );

    temp.close().unwrap();
}

#[test]
fn toml() {
    common::setup();

    let temp = assert_fs::TempDir::new().unwrap();
    let file = temp.child("hello/world.toml");

    file.write_str(
        r#"
nest = true
"#,
    )
    .unwrap();

    let schema = json!({ "hello": { "world": "toml" } }).try_into().unwrap();
    let store = nest::Store::new(temp.path(), schema);

    assert_eq!(
        store.get(&["hello", "world", "nest"]).unwrap(),
        json!(true).into(),
    );

    assert_eq!(
        store
            .set(&["hello", "world", "nest"], &json!(false).into())
            .unwrap(),
        (),
    );

    file.assert(
        r#"nest = false
"#,
    );

    temp.close().unwrap();
}