Command-Line Tools
Config Precedence
Prefer CLI over Defaults
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
Replay: real traced execution (multi-file project)
fn main() {
let cli_port = Some(8080);
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 = None;
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 = Some(9000);
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)
}
cli_port ← Some(8080), env_port ← Some(7000)
1fn main() {2 let cli_por→ Some(8080)t = Some(8080); //@cli_port=Some(8080), None, Some(9000)3 let env_por→ Some(7000)t = Some(7000);4 let port = choose_port(cli_porSome(8080)t, env_porSome(7000)t);5 println!("{port}");port ← 8080
3 let env_port = Some(7000);4 let por→ 8080t = choose_port(cli_porSome(8080)t, env_porSome(7000)t);5 println!("{port}");6}output8080
cli_port ← None, env_port ← Some(7000)
1fn main() {2 let cli_por→ Nonet = None;3 let env_por→ Some(7000)t = Some(7000);4 let port = choose_port(cli_porNonet, env_porSome(7000)t);5 println!("{port}");port ← 7000
3 let env_port = Some(7000);4 let por→ 7000t = choose_port(cli_porNonet, env_porSome(7000)t);5 println!("{port}");6}output7000
cli_port ← Some(9000), env_port ← Some(7000)
1fn main() {2 let cli_por→ Some(9000)t = Some(9000);3 let env_por→ Some(7000)t = Some(7000);4 let port = choose_port(cli_porSome(9000)t, env_porSome(7000)t);5 println!("{port}");port ← 9000
3 let env_port = Some(7000);4 let por→ 9000t = choose_port(cli_porSome(9000)t, env_porSome(7000)t);5 println!("{port}");6}output9000
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.