From 1d62ea1dc8acdef9130fb204d2aa8cb2a4aa06bd Mon Sep 17 00:00:00 2001 From: FujiApple Date: Fri, 6 Oct 2023 21:19:35 +0800 Subject: [PATCH] feat: improve command line bool flag handling (#708) --- src/config.rs | 12 ++++++++++-- src/config/cmd.rs | 4 ++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/config.rs b/src/config.rs index 6d526d4d..fa2f57c3 100644 --- a/src/config.rs +++ b/src/config.rs @@ -350,7 +350,7 @@ impl TryFrom<(Args, u16)> for TrippyConfig { cfg_file_tui.tui_max_samples, constants::DEFAULT_TUI_MAX_SAMPLES, ); - let tui_preserve_screen = cfg_layer( + let tui_preserve_screen = cfg_layer_bool_flag( args.tui_preserve_screen, cfg_file_tui.tui_preserve_screen, constants::DEFAULT_TUI_PRESERVE_SCREEN, @@ -381,7 +381,7 @@ impl TryFrom<(Args, u16)> for TrippyConfig { cfg_file_dns.dns_resolve_method, constants::DEFAULT_DNS_RESOLVE_METHOD, ); - let dns_lookup_as_info = cfg_layer( + let dns_lookup_as_info = cfg_layer_bool_flag( args.dns_lookup_as_info, cfg_file_dns.dns_lookup_as_info, constants::DEFAULT_DNS_LOOKUP_AS_INFO, @@ -555,6 +555,14 @@ fn cfg_layer_opt(fst: Option, snd: Option) -> Option { } } +fn cfg_layer_bool_flag(fst: bool, snd: Option, default: bool) -> bool { + match (fst, snd) { + (true, _) => true, + (false, Some(val)) => val, + (false, None) => default, + } +} + fn validate_logging(mode: Mode, verbose: bool) -> anyhow::Result<()> { if matches!(mode, Mode::Tui) && verbose { Err(anyhow!("cannot enable verbose logging in tui mode")) diff --git a/src/config/cmd.rs b/src/config/cmd.rs index 3a442e06..59cd4e90 100644 --- a/src/config/cmd.rs +++ b/src/config/cmd.rs @@ -129,7 +129,7 @@ pub struct Args { /// Lookup autonomous system (AS) information during DNS queries [default: false] #[arg(long, short = 'z', display_order = 25)] - pub dns_lookup_as_info: Option, + pub dns_lookup_as_info: bool, /// How to render addresses [default: host] #[arg(value_enum, short = 'a', long, display_order = 26)] @@ -153,7 +153,7 @@ pub struct Args { /// Preserve the screen on exit [default: false] #[arg(long, display_order = 31)] - pub tui_preserve_screen: Option, + pub tui_preserve_screen: bool, /// The Tui refresh rate [default: 100ms] #[arg(long, display_order = 32)]