Configuration and Runtime Flags
Runtime Config
Layered Values
Programs often merge defaults, environment-like settings, and command-line overrides into one effective value.
Program
Play the program to choose a command-line timeout and see which layer wins.
env_layer_config.rs
Replay: real traced execution (multi-file project)
fn main() {
let default_timeout = 10;
let env_timeout = Some(15);
let cli_timeout = Some(20);
let timeout = cli_timeout.or(env_timeout).unwrap_or(default_timeout);
println!("timeout={timeout}");
}
fn main() {
let default_timeout = 10;
let env_timeout = Some(15);
let cli_timeout = None;
let timeout = cli_timeout.or(env_timeout).unwrap_or(default_timeout);
println!("timeout={timeout}");
}
fn main() {
let default_timeout = 10;
let env_timeout = Some(15);
let cli_timeout = Some(5);
let timeout = cli_timeout.or(env_timeout).unwrap_or(default_timeout);
println!("timeout={timeout}");
}
default_timeout ← 10, env_timeout ← Some(15), cli_timeout ← Some(20)
1fn main() {2 let default_timeou→ 10t = 10;3 let env_timeou→ Some(15)t = Some(15);4 let cli_timeou→ Some(20)t = Some(20); //@cli_timeout=Some(20), None, Some(5)5 let timeou→ 20t = cli_timeout.or(env_timeout).unwrap_or(default_timeout);6 println!("timeout={timeout}");7}outputtimeout=20
default_timeout ← 10, env_timeout ← Some(15), cli_timeout ← None
1fn main() {2 let default_timeou→ 10t = 10;3 let env_timeou→ Some(15)t = Some(15);4 let cli_timeou→ Nonet = None;5 let timeou→ 15t = cli_timeout.or(env_timeout).unwrap_or(default_timeout);6 println!("timeout={timeout}");7}outputtimeout=15
default_timeout ← 10, env_timeout ← Some(15), cli_timeout ← Some(5)
1fn main() {2 let default_timeou→ 10t = 10;3 let env_timeou→ Some(15)t = Some(15);4 let cli_timeou→ Some(5)t = Some(5);5 let timeou→ 5t = cli_timeout.or(env_timeout).unwrap_or(default_timeout);6 println!("timeout={timeout}");7}outputtimeout=5
default
`default_timeout` is the fallback when no higher layer provides a value.
Option
`Some(value)` means the layer supplied a value; `None` means it did not.
precedence
`cli_timeout.or(env_timeout).unwrap_or(default)` chooses CLI, then environment, then default.