#!/usr/bin/env rust-script
use noml::Config;
use std::env;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("๐ NOML Async Demo");
println!("==================\n");
env::set_var("PORT", "8080");
env::set_var("DATABASE_URL", "postgresql://localhost/myapp");
let config_content = r#"
# Sample async configuration
app_name = "AsyncApp"
version = "1.0.0"
[server]
host = "0.0.0.0"
port = env("PORT", "3000")
workers = 4
[database]
url = env("DATABASE_URL", "sqlite:memory:")
pool_size = 10
"#;
tokio::fs::write("demo_config.noml", config_content).await?;
println!("โ
Config file written async");
let config = Config::load_async("demo_config.noml").await?;
println!("โ
Config loaded async");
let app_name = config.get("app_name").unwrap().as_string().unwrap();
let port = config.get("server.port").unwrap().as_string().unwrap();
let db_url = config.get("database.url").unwrap().as_string().unwrap();
println!("๏ฟฝ Configuration:");
println!(" App: {app_name}");
println!(" Port: {port}");
println!(" Database: {db_url}");
let mut config = config;
config.set("last_started", "2025-09-19T12:00:00Z")?;
config.save_async("demo_config.noml").await?;
println!("โ
Config saved async");
config.reload_async().await?;
println!("โ
Config reloaded async");
let last_started = config.get("last_started").unwrap().as_string().unwrap();
println!(" Last started: {last_started}");
tokio::fs::remove_file("demo_config.noml").await?;
println!("๐๏ธ Cleaned up");
println!("\n๐ Async demo completed!");
println!("NOML is ready for modern async Rust applications! ๐");
Ok(())
}