From db9afa0b06355028eafe3bc29fe0b2429ba8fd0a Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Sun, 29 Mar 2026 00:52:16 +0800 Subject: Completed the first preliminary usable version of the Mingling framework. --- mingling/src/program/flag.rs | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) (limited to 'mingling/src/program/flag.rs') diff --git a/mingling/src/program/flag.rs b/mingling/src/program/flag.rs index 0178ebe..8372517 100644 --- a/mingling/src/program/flag.rs +++ b/mingling/src/program/flag.rs @@ -1,4 +1,4 @@ -use crate::Program; +use crate::{Program, ProgramCollect}; pub struct Flag { vec: Vec<&'static str>, @@ -80,11 +80,14 @@ macro_rules! special_argument { }}; } -impl Program { +impl Program +where + C: ProgramCollect, +{ /// Registers a global argument (with value) and its handler. pub fn global_argument(&mut self, arguments: A, do_fn: F) where - F: Fn(&mut Program, String), + F: Fn(&mut Program, String), A: Into, { let flag = arguments.into(); @@ -100,7 +103,7 @@ impl Program { /// Registers a global flag (boolean) and its handler. pub fn global_flag(&mut self, flag: A, do_fn: F) where - F: Fn(&mut Program), + F: Fn(&mut Program), A: Into, { let flag = flag.into(); @@ -112,4 +115,34 @@ impl Program { } } } + + /// Extracts a global argument (with value) from arguments + pub fn pick_global_argument(&mut self, flag: F) -> Option + where + F: Into, + { + let flag: Flag = flag.into(); + for argument in flag.iter() { + let value = special_argument!(self.args, argument); + if value.is_some() { + return value; + } + } + None + } + + /// Extracts global flags from arguments + pub fn pick_global_flag(&mut self, flag: F) -> bool + where + F: Into, + { + let flag: Flag = flag.into(); + for argument in flag.iter() { + let enabled = special_flag!(self.args, argument); + if enabled { + return enabled; + } + } + return false; + } } -- cgit