summaryrefslogtreecommitdiff
path: root/mingling/src/parser/picker
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-04-04 17:52:19 +0800
committer魏曹先生 <1992414357@qq.com>2026-04-04 17:52:19 +0800
commitf0475c2207181c13dabcd4e78a163cde70573ade (patch)
treec659e766f038e8a609d174c4eba85be12791cdd7 /mingling/src/parser/picker
parent15028700581ee15d60e0fdbc28aa8ace539ad293 (diff)
Add vector pickers
Diffstat (limited to 'mingling/src/parser/picker')
-rw-r--r--mingling/src/parser/picker/builtin.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/mingling/src/parser/picker/builtin.rs b/mingling/src/parser/picker/builtin.rs
index 9184813..8a10dfc 100644
--- a/mingling/src/parser/picker/builtin.rs
+++ b/mingling/src/parser/picker/builtin.rs
@@ -10,6 +10,14 @@ impl Pickable for String {
}
}
+impl Pickable for Vec<String> {
+ type Output = Vec<String>;
+
+ fn pick(args: &mut crate::parser::Argument, flag: mingling_core::Flag) -> Option<Self::Output> {
+ Some(args.pick_arguments(flag))
+ }
+}
+
macro_rules! impl_pickable_for_number {
($($t:ty),*) => {
$(
@@ -23,6 +31,23 @@ macro_rules! impl_pickable_for_number {
picked.parse().ok()
}
}
+
+ impl Pickable for Vec<$t> {
+ type Output = Vec<$t>;
+
+ fn pick(args: &mut crate::parser::Argument, flag: mingling_core::Flag) -> Option<Self::Output> {
+ let picked_vec = args.pick_arguments(flag);
+ let mut result = Vec::new();
+ for picked in picked_vec {
+ if let Ok(parsed) = picked.parse() {
+ result.push(parsed);
+ } else {
+ return None;
+ }
+ }
+ Some(result)
+ }
+ }
)*
};
}
@@ -52,6 +77,23 @@ impl Pickable for usize {
}
}
+impl Pickable for Vec<usize> {
+ type Output = Vec<usize>;
+
+ fn pick(args: &mut crate::parser::Argument, flag: mingling_core::Flag) -> Option<Self::Output> {
+ let picked_vec = args.pick_arguments(flag);
+ let mut result = Vec::new();
+ for picked in picked_vec {
+ let size_parse = Size::from_str(picked.as_str());
+ match size_parse {
+ Ok(size) => result.push(size.bytes() as usize),
+ Err(_) => return None,
+ }
+ }
+ Some(result)
+ }
+}
+
impl Pickable for Argument {
type Output = Argument;