From b22041f6da39c4d674ad6bcd15ddd765144f85ef Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Thu, 16 Jul 2026 23:57:05 +0800 Subject: 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 --- mingling_picker/src/builtin/pick_string.rs | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) (limited to 'mingling_picker/src/builtin/pick_string.rs') 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 { - SingleMatcher::tag(ctx) - } - - fn pick(raw_strs: &[&str]) -> PickerArgResult { - 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 { + match str { + Some(str) => PickerArgResult::Parsed(str.to_string()), + None => NotFound, } } } -- cgit