aboutsummaryrefslogtreecommitdiff
path: root/mingling_picker/src/builtin/pick_string.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-07-16 23:57:05 +0800
committer魏曹先生 <1992414357@qq.com>2026-07-16 23:57:05 +0800
commitb22041f6da39c4d674ad6bcd15ddd765144f85ef (patch)
treef0410c3a6d6a495ec72267fc05349e8b988ef82d /mingling_picker/src/builtin/pick_string.rs
parent1f34aa214dcd94c327a4ce09a1a4e4db176099ef (diff)
feat(pickable): introduce SinglePickable trait
Extract a simplified trait for types that consume exactly one argument, with a blanket implementation of the existing Pickable trait
Diffstat (limited to 'mingling_picker/src/builtin/pick_string.rs')
-rw-r--r--mingling_picker/src/builtin/pick_string.rs22
1 files changed, 7 insertions, 15 deletions
diff --git a/mingling_picker/src/builtin/pick_string.rs b/mingling_picker/src/builtin/pick_string.rs
index 4a65873..c96f667 100644
--- a/mingling_picker/src/builtin/pick_string.rs
+++ b/mingling_picker/src/builtin/pick_string.rs
@@ -1,19 +1,11 @@
-use crate::parselib::{SingleMatcher, seek_single};
-use crate::pickable_needed::*;
+use crate::PickerArgResult::NotFound;
+use crate::{SinglePickable, pickable_needed::*};
-impl<'a> Pickable<'a> for String {
- fn get_attr(flag: &'a PickerArg<'a, Self>) -> PickerArgAttr {
- PickerArgAttr::positional_or_single(flag)
- }
-
- fn tag(ctx: TagPhaseContext) -> Vec<usize> {
- SingleMatcher::tag(ctx)
- }
-
- fn pick(raw_strs: &[&str]) -> PickerArgResult<Self> {
- match seek_single(raw_strs) {
- Some(v) => PickerArgResult::Parsed(v.to_string()),
- None => PickerArgResult::NotFound,
+impl SinglePickable for String {
+ fn pick_single(str: Option<&str>) -> PickerArgResult<Self> {
+ match str {
+ Some(str) => PickerArgResult::Parsed(str.to_string()),
+ None => NotFound,
}
}
}