trail-config 0.4.0

A Rust library for reading config files with path-based access, typed deserialization, environment overlays, deep merging, env variable interpolation, and hot reload support.
Documentation
use yaml_serde::{Value, from_str, Number};
use super::{Config, ConfigError, YAML};

#[test]
fn get_leaf_test() {
    let parsed: Value = from_str(YAML).unwrap();
    let value1 = Config::get_leaf(&parsed, "db/redis/port", "/");
    let value2 = Config::get_leaf(&parsed, "db/redis/username", "/");

    assert_eq!(value1, Some(Value::Number(Number::from(6379))));
    assert_eq!(value2, None);
}

#[test]
fn get_file_test() {
    let result = Config::get_file("config_{env}.yaml", Some("dev"));

    assert!(result.is_ok());
    let (file, env) = result.unwrap();
    assert_eq!(env, Some(String::from("dev")));
    assert_eq!(file, "config_dev.yaml");
}

#[test]
fn get_file_invalid_template() {
    let result = Config::get_file("config.yaml", Some("dev"));

    assert!(result.is_err());
    match result {
        Err(ConfigError::FormatError(_)) => (),
        _ => panic!("Expected FormatError for missing {{env}} placeholder"),
    }
}

#[test]
fn to_string_test() {
    let parsed: Value = from_str(YAML).unwrap();
    let value = Config::get_leaf(&parsed, "db/redis/port", "/").unwrap();
    let str_value = Config::to_string(&value);

    assert_eq!(str_value, "6379");
}