diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-07-16 23:57:05 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-07-16 23:57:05 +0800 |
| commit | b22041f6da39c4d674ad6bcd15ddd765144f85ef (patch) | |
| tree | f0410c3a6d6a495ec72267fc05349e8b988ef82d /mingling_picker/src/builtin/pick_string.rs | |
| parent | 1f34aa214dcd94c327a4ce09a1a4e4db176099ef (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.rs | 22 |
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, } } } |
