use hexcfg::prelude::*;
fn main() -> Result<()> {
tracing_subscriber::fmt::init();
println!("=== Configuration Crate: Basic Usage ===\n");
let service = DefaultConfigService::builder().with_env_vars().build()?;
println!("Configuration service created with environment variables.\n");
println!("--- Example 1: String Values ---");
let app_name_key = ConfigKey::from("app.name");
match service.get(&app_name_key) {
Ok(value) => {
println!("✓ APP_NAME found: {}", value.as_str());
}
Err(_) => {
println!("✗ APP_NAME not found, using default");
let default_value = service.get_or_default(&app_name_key, "DefaultApp");
println!(" Default value: {}", default_value.as_str());
}
}
println!("\n--- Example 2: Integer Values ---");
let port_key = ConfigKey::from("database.port");
match service.get(&port_key) {
Ok(value) => match value.as_i32("database.port") {
Ok(port) => println!("✓ DATABASE_PORT found: {} (as i32)", port),
Err(e) => println!("✗ DATABASE_PORT found but conversion failed: {}", e),
},
Err(_) => {
println!("✗ DATABASE_PORT not found, using default: 3000");
}
}
println!("\n--- Example 3: Boolean Values ---");
let debug_key = ConfigKey::from("enable.debug");
match service.get(&debug_key) {
Ok(value) => match value.as_bool("enable.debug") {
Ok(enabled) => println!("✓ ENABLE_DEBUG found: {} (as bool)", enabled),
Err(e) => println!("✗ ENABLE_DEBUG found but conversion failed: {}", e),
},
Err(_) => {
println!("✗ ENABLE_DEBUG not found, using default: false");
}
}
println!("\n--- Example 4: Float Values ---");
let timeout_key = ConfigKey::from("api.timeout");
match service.get(&timeout_key) {
Ok(value) => match value.as_f64("api.timeout") {
Ok(timeout) => println!("✓ API_TIMEOUT found: {} seconds (as f64)", timeout),
Err(e) => println!("✗ API_TIMEOUT found but conversion failed: {}", e),
},
Err(_) => {
println!("✗ API_TIMEOUT not found, using default: 10.0 seconds");
}
}
println!("\n--- Example 5: Checking Key Existence ---");
let test_key = ConfigKey::from("some.random.key");
if service.has(&test_key) {
println!("✓ Key 'some.random.key' exists");
} else {
println!("✗ Key 'some.random.key' does not exist");
}
println!("\n--- Example 6: Optional Configuration with Defaults ---");
let log_level_key = ConfigKey::from("log.level");
let log_level = service.get_or_default(&log_level_key, "info");
println!(
"Log level: {} (from LOG_LEVEL or default)",
log_level.as_str()
);
println!("\n=== Example Complete ===");
println!("\nTip: Try setting different environment variables and running again!");
println!("Examples:");
println!(" export APP_NAME='My Cool App'");
println!(" export DATABASE_PORT=8080");
println!(" export ENABLE_DEBUG=false");
Ok(())
}