summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-03-31 08:54:51 +0800
committer魏曹先生 <1992414357@qq.com>2026-03-31 08:54:51 +0800
commit537a815efaa3fb85435ca3e500f870d448b17337 (patch)
tree5897d9b69edf9cfdc50210b7d7d2fe57461126c6
parent39f4f34cfdf940e1c74184edb3387ef8900ba4b4 (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
-rw-r--r--mingling/src/parser/args.rs9
-rw-r--r--mingling/src/parser/picker.rs2
-rw-r--r--mingling/src/parser/picker/builtin.rs13
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())
+ }
+}