hydroconf 0.2.0

Effortless configuration management for Rust.
Documentation
use std::path::PathBuf;

pub fn get_var<'a, T>(key: &'a str, suffix: &'a str) -> Option<T>
where
    T: FromVar,
{
    let full_key = format!("{}{}", key, suffix);
    match std::env::var(full_key) {
        Err(_) => None,
        Ok(v) => FromVar::parse(v),
    }
}

pub fn get_var_default<'a, T>(key: &'a str, suffix: &'a str, default: T) -> T
where
    T: FromVar,
{
    get_var(key, suffix).unwrap_or(default)
}

pub trait FromVar {
    fn parse(var: String) -> Option<Self>
    where
        Self: Sized;
}

impl FromVar for PathBuf {
    fn parse(var: String) -> Option<Self> {
        Some(PathBuf::from(var))
    }
}

impl FromVar for String {
    fn parse(var: String) -> Option<Self> {
        Some(var)
    }
}