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
fn main() {
    let default_timeout = 10;
    let env_timeout = Some(15);
    let cli_timeout = ;
    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 = ;
    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 = ;
    let timeout = cli_timeout.or(env_timeout).unwrap_or(default_timeout);
    println!("timeout={timeout}");
}
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.