libconfig-rs 4.0.1

libconfig parser in rust
Documentation
use libconfig_rs::{ArrayType, Value};
use std::str::FromStr;

#[test]
fn test_empty() {
    let config = "config : {};";
    let res = Value::from_str(config).unwrap();
    assert_eq!(res, Value::Object(indexmap::IndexMap::new()));
}

#[test]
fn test_bool() {
    let config = "config : true;";
    let res = Value::from_str(config).unwrap();
    assert_eq!(res, Value::Bool(true))
}

#[test]
fn test_int() {
    let config = "config : 123;";
    let res = Value::from_str(config).unwrap();
    assert_eq!(res, Value::Int(123))
}

#[test]
fn test_long() {
    let config = "config : 4000000L;";
    let res = Value::from_str(config).unwrap();
    assert_eq!(res, Value::Int(4000000))
}

#[test]
fn test_float() {
    let config = "config : 123.1;";
    let res = Value::from_str(config).unwrap();
    assert_eq!(res, Value::Float(123.1))
}

#[test]
fn test_float_2() {
    let config = "config : 1e-5;";
    let res = Value::from_str(config).unwrap();
    assert_eq!(res, Value::Float(0.00001))
}

#[test]
fn test_string() {
    let config = "config : \"Test\";";
    let res = Value::from_str(config).unwrap();
    assert_eq!(res, Value::String(String::from("Test")))
}

#[test]
fn test_object() {
    let config = "config : { test : 123; };";
    let res = Value::from_str(config).unwrap();

    let mut inner = indexmap::IndexMap::new();
    inner.insert("test".into(), Value::Int(123));

    assert_eq!(res, Value::Object(inner))
}

#[test]
fn test_object_string() {
    let config = "config : { test : \"Test\"; };";
    let res = Value::from_str(config).unwrap();

    let mut inner = indexmap::IndexMap::new();
    inner.insert("test".into(), Value::String(String::from("Test")));

    assert_eq!(res, Value::Object(inner))
}

#[test]
fn test_list() {
    let config = "config : { test : (1, 2, 3); };";
    let res = Value::from_str(config).unwrap();

    let mut inner = indexmap::IndexMap::new();
    inner.insert(
        "test".into(),
        Value::Array(
            vec![Value::Int(1), Value::Int(2), Value::Int(3)],
            ArrayType::List,
        ),
    );

    assert_eq!(res, Value::Object(inner))
}

#[test]
fn test_array() {
    let config = "config : { test : [1, 2, 3]; };";
    let res = Value::from_str(config).unwrap();

    let mut inner = indexmap::IndexMap::new();
    inner.insert(
        "test".into(),
        Value::Array(
            vec![Value::Int(1), Value::Int(2), Value::Int(3)],
            ArrayType::Array,
        ),
    );

    assert_eq!(res, Value::Object(inner))
}

#[test]
fn test_vproj_1() {
    let config = include_str!("../tests/1.vproj");
    let res = Value::from_str(config).unwrap();
    assert!(matches!(res, Value::Object(_)))
}

#[test]
fn test_vproj_2() {
    let config = include_str!("../tests/2.vproj");
    let res = Value::from_str(config).unwrap();
    assert!(matches!(res, Value::Object(_)))
}