diff options
Diffstat (limited to 'mingling/src/parser/picker')
| -rw-r--r-- | mingling/src/parser/picker/builtin.rs | 42 |
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; |
