A command-line value usually overrides environment or default configuration.

Program

Play the program to choose the CLI port option and see which port wins.

config_precedence.rs
fn main() {
    let cli_port = ;
    let env_port = Some(7000);
    let port = choose_port(cli_port, env_port);
    println!("{port}");
}

fn choose_port(cli_port: Option<i32>, env_port: Option<i32>) -> i32 {
    cli_port.or(env_port).unwrap_or(3000)
}
fn main() {
    let cli_port = ;
    let env_port = Some(7000);
    let port = choose_port(cli_port, env_port);
    println!("{port}");
}

fn choose_port(cli_port: Option<i32>, env_port: Option<i32>) -> i32 {
    cli_port.or(env_port).unwrap_or(3000)
}
fn main() {
    let cli_port = ;
    let env_port = Some(7000);
    let port = choose_port(cli_port, env_port);
    println!("{port}");
}

fn choose_port(cli_port: Option<i32>, env_port: Option<i32>) -> i32 {
    cli_port.or(env_port).unwrap_or(3000)
}
precedence `cli_port.or(env_port)` prefers the command-line option when it is present.
Option `Option<i32>` models whether a configuration value was provided.
default `unwrap_or(3000)` supplies a fallback if neither source has a value.