diff options
Diffstat (limited to 'mingling_picker/src/builtin')
| -rw-r--r-- | mingling_picker/src/builtin/pick_bool.rs | 22 | ||||
| -rw-r--r-- | mingling_picker/src/builtin/pick_flag.rs | 21 | ||||
| -rw-r--r-- | mingling_picker/src/builtin/pick_numbers.rs | 80 | ||||
| -rw-r--r-- | mingling_picker/src/builtin/pick_string.rs | 11 |
4 files changed, 0 insertions, 134 deletions
diff --git a/mingling_picker/src/builtin/pick_bool.rs b/mingling_picker/src/builtin/pick_bool.rs deleted file mode 100644 index ccc4424..0000000 --- a/mingling_picker/src/builtin/pick_bool.rs +++ /dev/null @@ -1,22 +0,0 @@ -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) - } - } -} diff --git a/mingling_picker/src/builtin/pick_flag.rs b/mingling_picker/src/builtin/pick_flag.rs deleted file mode 100644 index b642a9a..0000000 --- a/mingling_picker/src/builtin/pick_flag.rs +++ /dev/null @@ -1,21 +0,0 @@ -use crate::parselib::{FlagMatcher, Matcher}; -use crate::pickable_needed::*; -use crate::value::Flag; - -impl<'a> Pickable<'a> for Flag { - 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() { - PickerArgResult::Parsed(Flag::Inactive) - } else { - PickerArgResult::Parsed(Flag::Active) - } - } -} diff --git a/mingling_picker/src/builtin/pick_numbers.rs b/mingling_picker/src/builtin/pick_numbers.rs deleted file mode 100644 index a5ab0a9..0000000 --- a/mingling_picker/src/builtin/pick_numbers.rs +++ /dev/null @@ -1,80 +0,0 @@ -use crate::{BoundaryCheck, SinglePickable, pickable_needed::*}; - -macro_rules! impl_single_pickable_num { - ($($t:ty),+ $(,)?) => { - $(impl SinglePickable for $t { - fn pick_single(str: Option<&str>) -> PickerArgResult<Self> { - match str { - Some(s) => s.parse::<$t>().map(PickerArgResult::Parsed).unwrap_or(PickerArgResult::NotFound), - None => PickerArgResult::NotFound, - } - } - })+ - }; -} - -/// Returns `true` if `raw` looks like an integer (digits, optional `+`/`-` prefix, -/// no decimal point or exponent). -fn is_int_like(raw: &str) -> bool { - let s = raw.trim(); - let bytes = s.as_bytes(); - if bytes.is_empty() { - return false; - } - let mut i = 0; - if bytes[0] == b'-' || bytes[0] == b'+' { - i = 1; - } - if i >= bytes.len() { - return false; - } - for &b in &bytes[i..] { - if !b.is_ascii_digit() { - return false; - } - } - true -} - -/// Returns `true` if `raw` looks like a float (contains `.`, `e`, or `E`). -fn is_float_like(raw: &str) -> bool { - let s = raw.trim(); - s.contains('.') || s.contains('e') || s.contains('E') -} - -impl_single_pickable_num! { - i8, i16, i32, i64, i128, isize, - u8, u16, u32, u64, u128, usize, - f32, f64, -} - -// Integer boundary: only accept strings that look like integers. -// Float-like strings trigger a boundary. -macro_rules! impl_boundary_check_int { - ($($t:ty),+ $(,)?) => { - $(impl BoundaryCheck for $t { - fn check_boundary(raw: &str) -> bool { - !is_int_like(raw) - } - })+ - }; -} - -impl_boundary_check_int! { - i8, i16, i32, i64, i128, isize, - u8, u16, u32, u64, u128, usize, -} - -// Float boundary: only accept strings that look like floats. -// Integer-like strings trigger a boundary. -impl BoundaryCheck for f32 { - fn check_boundary(raw: &str) -> bool { - !is_float_like(raw) || raw.parse::<f32>().is_err() - } -} - -impl BoundaryCheck for f64 { - fn check_boundary(raw: &str) -> bool { - !is_float_like(raw) || raw.parse::<f64>().is_err() - } -} diff --git a/mingling_picker/src/builtin/pick_string.rs b/mingling_picker/src/builtin/pick_string.rs deleted file mode 100644 index c96f667..0000000 --- a/mingling_picker/src/builtin/pick_string.rs +++ /dev/null @@ -1,11 +0,0 @@ -use crate::PickerArgResult::NotFound; -use crate::{SinglePickable, pickable_needed::*}; - -impl SinglePickable for String { - fn pick_single(str: Option<&str>) -> PickerArgResult<Self> { - match str { - Some(str) => PickerArgResult::Parsed(str.to_string()), - None => NotFound, - } - } -} |
