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.

cli_timeout
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}");
}
  1. 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
  1. 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
  1. 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.