aboutsummaryrefslogtreecommitdiff
path: root/mingling_picker/src/builtin/pick_bool.rs
diff options
context:
space:
mode:
Diffstat (limited to 'mingling_picker/src/builtin/pick_bool.rs')
-rw-r--r--mingling_picker/src/builtin/pick_bool.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/mingling_picker/src/builtin/pick_bool.rs b/mingling_picker/src/builtin/pick_bool.rs
new file mode 100644
index 0000000..ccc4424
--- /dev/null
+++ b/mingling_picker/src/builtin/pick_bool.rs
@@ -0,0 +1,22 @@
+use crate::parselib::{FlagMatcher, Matcher};
+use crate::pickable_needed::*;
+
+impl<'a> Pickable<'a> for bool {
+ fn get_attr(_: &'a PickerArg<'a, Self>) -> PickerArgAttr {
+ PickerArgAttr::Flag
+ }
+
+ fn tag(ctx: TagPhaseContext) -> Vec<usize> {
+ FlagMatcher::match_all(ctx.into())
+ }
+
+ fn pick(raw_strs: &[&str]) -> PickerArgResult<Self> {
+ if raw_strs.is_empty() {
+ // No matching flag found — signal NotFound so the fallback chain
+ // (default → route) gets a chance to run.
+ PickerArgResult::NotFound
+ } else {
+ PickerArgResult::Parsed(true)
+ }
+ }
+}