diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-03-31 08:54:51 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-03-31 08:54:51 +0800 |
| commit | 537a815efaa3fb85435ca3e500f870d448b17337 (patch) | |
| tree | 5897d9b69edf9cfdc50210b7d7d2fe57461126c6 /mingling/src/parser | |
| parent | 39f4f34cfdf940e1c74184edb3387ef8900ba4b4 (diff) | |
Add Argument type to picker builtins and expose Picker
- Add `#[derive(Debug, Default)]` to `Argument` struct
- Add `dump_remains` method to `Argument`
- Remove `#[doc(hidden)]` from `Picker` struct
- Implement `Pickable` for `Argument` to allow consuming remaining args
Diffstat (limited to 'mingling/src/parser')
| -rw-r--r-- | mingling/src/parser/args.rs | 9 | ||||
| -rw-r--r-- | mingling/src/parser/picker.rs | 2 | ||||
| -rw-r--r-- | mingling/src/parser/picker/builtin.rs | 13 |
3 files changed, 22 insertions, 2 deletions
diff --git a/mingling/src/parser/args.rs b/mingling/src/parser/args.rs index e659feb..a1f1eb0 100644 --- a/mingling/src/parser/args.rs +++ b/mingling/src/parser/args.rs @@ -1,5 +1,8 @@ +use std::mem::replace; + use mingling_core::{Flag, special_argument, special_flag}; +#[derive(Debug, Default)] pub struct Argument { vec: Vec<String>, } @@ -92,4 +95,10 @@ impl Argument { } false } + + /// Dump all remaining arguments + pub fn dump_remains(&mut self) -> Vec<String> { + let new = Vec::new(); + replace(&mut self.vec, new) + } } diff --git a/mingling/src/parser/picker.rs b/mingling/src/parser/picker.rs index dc8b8da..9fcb3e6 100644 --- a/mingling/src/parser/picker.rs +++ b/mingling/src/parser/picker.rs @@ -3,7 +3,6 @@ use mingling_core::Flag; pub mod builtin; -#[doc(hidden)] pub struct Picker { pub args: Argument, } @@ -103,6 +102,7 @@ define_pick_structs! { Pick9 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T define_pick_structs! { Pick10 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6, T7 val_7, T8 val_8, T9 val_9, T10 val_10 } define_pick_structs! { Pick11 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6, T7 val_7, T8 val_8, T9 val_9, T10 val_10, T11 val_11 } define_pick_structs! { Pick12 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6, T7 val_7, T8 val_8, T9 val_9, T10 val_10, T11 val_11, T12 val_12 } + impl_pick_structs! { Pick1 Pick2 val_2 T1 val_1 } impl_pick_structs! { Pick2 Pick3 val_3 T1 val_1, T2 val_2 } impl_pick_structs! { Pick3 Pick4 val_4 T1 val_1, T2 val_2, T3 val_3 } diff --git a/mingling/src/parser/picker/builtin.rs b/mingling/src/parser/picker/builtin.rs index 0b1ce08..9184813 100644 --- a/mingling/src/parser/picker/builtin.rs +++ b/mingling/src/parser/picker/builtin.rs @@ -1,6 +1,6 @@ use size::Size; -use crate::parser::Pickable; +use crate::parser::{Argument, Pickable}; impl Pickable for String { type Output = String; @@ -51,3 +51,14 @@ impl Pickable for usize { } } } + +impl Pickable for Argument { + type Output = Argument; + + fn pick( + args: &mut crate::parser::Argument, + _flag: mingling_core::Flag, + ) -> Option<Self::Output> { + Some(args.dump_remains().into()) + } +} |
