use dynamic_config::dynamic_config;
use serde::{Deserialize, Serialize};
#[dynamic_config(files = ["dynamic-config/examples/app.json"], key = "server", save)]
#[derive(Debug, Deserialize, Serialize)]
struct ServerConfig {
host: String,
port: u16,
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut config = ServerConfig::load()?;
println!("loaded: {config:?}");
config.port = 9090;
let path = std::env::temp_dir().join("dynamic-config-example.json");
config.save(&path)?;
println!("\nwrote {}:", path.display());
println!("{}", std::fs::read_to_string(&path)?);
println!("Nested under the section key, so it reads straight back in.");
let snapshot = ServerConfig::snapshot()?;
println!("\nreading without a struct:");
println!(" host = {}", snapshot.get::<String>("host")?);
println!(" contains(x) = {}", snapshot.contains("nothing_here"));
std::fs::remove_file(&path)?;
Ok(())
}