use std::env;
use crate::domain::{Node, Table};
use crate::error::ConfigerError;
use crate::reader::ConfigReader;
pub mod standard;
pub trait Environment {
fn set(&mut self, key: &str, value: Node) -> Result<(), ConfigerError>;
fn get(&self, key: &str) -> Result<&Node, ConfigerError>;
fn try_acquire(&self, suffix: &str) -> Option<&dyn ConfigReader>;
fn try_acquires(&self) -> Vec<&dyn ConfigReader>;
}
pub trait DynamicEnvironment: Environment {
fn set_t<T>(&mut self, k: &str, v: T) -> Result<(), ConfigerError>
where
T: Into<Node>,
{
self.set(k, v.into())
}
}
pub fn try_load_env_variables() -> Table {
let vars: Vec<(String, String)> = env::vars().collect();
let mut table = Table::new();
for (key, value) in vars {
table.insert(key, Node::String(value));
}
table
}