From b796a3e18ef360f88da138e176734fbfb5efcbd0 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Mon, 1 Jun 2026 13:02:50 +0800 Subject: Refactor built-in flags into reusable setup structs --- mingling/src/setups/basic.rs | 103 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 97 insertions(+), 6 deletions(-) (limited to 'mingling') diff --git a/mingling/src/setups/basic.rs b/mingling/src/setups/basic.rs index 3783df0..6a69733 100644 --- a/mingling/src/setups/basic.rs +++ b/mingling/src/setups/basic.rs @@ -1,4 +1,4 @@ -use mingling_core::{Program, ProgramCollect, setup::ProgramSetup}; +use mingling_core::{Flag, Program, ProgramCollect, setup::ProgramSetup}; /// Performs basic program initialization: /// @@ -12,17 +12,108 @@ where C: ProgramCollect, { fn setup(self, program: &mut Program) { - program.global_flag(["--quiet", "-q"], |p| { + program.with_setup(HelpFlagSetup::new(["-h", "--help"])); + program.with_setup(QuietFlagSetup::new(["-q", "--quiet"])); + program.with_setup(ConfirmFlagSetup::new(["-C", "--confirm"])); + } +} + +/// Provides setup for parsing the user help flag +/// +/// The default value is `--help / -h` +pub struct HelpFlagSetup { + flag: Flag, +} + +impl HelpFlagSetup { + /// Creates a new `HelpFlagSetup` with the given flag aliases. + pub fn new(flag: impl Into) -> Self { + Self { flag: flag.into() } + } +} + +impl ProgramSetup for HelpFlagSetup +where + C: ProgramCollect, +{ + fn setup(self, program: &mut Program) { + program.global_flag(self.flag.clone(), |p| { + p.user_context.help = true; + }); + } +} + +impl Default for HelpFlagSetup { + fn default() -> Self { + Self { + flag: ["-h", "--help"].into(), + } + } +} + +/// Provides setup for parsing the quiet flag +/// +/// The default value is `--quiet / -q` +pub struct QuietFlagSetup { + flag: Flag, +} + +impl QuietFlagSetup { + /// Creates a new `QuietFlagSetup` with the given flag aliases. + pub fn new(flag: impl Into) -> Self { + Self { flag: flag.into() } + } +} + +impl ProgramSetup for QuietFlagSetup +where + C: ProgramCollect, +{ + fn setup(self, program: &mut Program) { + program.global_flag(self.flag.clone(), |p| { p.stdout_setting.render_output = false; p.stdout_setting.error_output = false; }); + } +} - program.global_flag(["--help", "-h"], |p| { - p.user_context.help = true; - }); +impl Default for QuietFlagSetup { + fn default() -> Self { + Self { + flag: ["-q", "--quiet"].into(), + } + } +} - program.global_flag(["--confirm", "-C"], |p| { +/// Provides setup for parsing the confirm flag +/// +/// The default value is `--confirm / -C` +pub struct ConfirmFlagSetup { + flag: Flag, +} + +impl ConfirmFlagSetup { + /// Creates a new `ConfirmFlagSetup` with the given flag aliases. + pub fn new(flag: impl Into) -> Self { + Self { flag: flag.into() } + } +} + +impl ProgramSetup for ConfirmFlagSetup +where + C: ProgramCollect, +{ + fn setup(self, program: &mut Program) { + program.global_flag(self.flag.clone(), |p| { p.user_context.confirm = true; }); } } + +impl Default for ConfirmFlagSetup { + fn default() -> Self { + Self { + flag: ["-C", "--confirm"].into(), + } + } +} -- cgit