diff options
Diffstat (limited to 'arg_picker/src/builtin')
| -rw-r--r-- | arg_picker/src/builtin/pick_bool.rs | 23 | ||||
| -rw-r--r-- | arg_picker/src/builtin/pick_flag.rs | 22 | ||||
| -rw-r--r-- | arg_picker/src/builtin/pick_ip_attr.rs | 37 | ||||
| -rw-r--r-- | arg_picker/src/builtin/pick_numbers.rs | 78 | ||||
| -rw-r--r-- | arg_picker/src/builtin/pick_pathbuf.rs | 15 | ||||
| -rw-r--r-- | arg_picker/src/builtin/pick_paths.rs | 168 | ||||
| -rw-r--r-- | arg_picker/src/builtin/pick_picker_args.rs | 22 | ||||
| -rw-r--r-- | arg_picker/src/builtin/pick_socket_attr.rs | 37 | ||||
| -rw-r--r-- | arg_picker/src/builtin/pick_string.rs | 9 |
9 files changed, 0 insertions, 411 deletions
diff --git a/arg_picker/src/builtin/pick_bool.rs b/arg_picker/src/builtin/pick_bool.rs deleted file mode 100644 index e508c7e..0000000 --- a/arg_picker/src/builtin/pick_bool.rs +++ /dev/null @@ -1,23 +0,0 @@ -// Doc Not Optimize -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/arg_picker/src/builtin/pick_flag.rs b/arg_picker/src/builtin/pick_flag.rs deleted file mode 100644 index 15b13a3..0000000 --- a/arg_picker/src/builtin/pick_flag.rs +++ /dev/null @@ -1,22 +0,0 @@ -// Doc Not Optimize -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(Self::Inactive) - } else { - PickerArgResult::Parsed(Self::Active) - } - } -} diff --git a/arg_picker/src/builtin/pick_ip_attr.rs b/arg_picker/src/builtin/pick_ip_attr.rs deleted file mode 100644 index cf32426..0000000 --- a/arg_picker/src/builtin/pick_ip_attr.rs +++ /dev/null @@ -1,37 +0,0 @@ -// Doc Not Optimize -use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; - -use crate::SinglePickable; - -impl SinglePickable for IpAddr { - fn pick_single(str: Option<&str>) -> crate::PickerArgResult<Self> { - str.map_or(crate::PickerArgResult::NotFound, |s| { - s.parse::<Self>() - .map_or(crate::PickerArgResult::NotFound, |addr| { - crate::PickerArgResult::Parsed(addr) - }) - }) - } -} - -impl SinglePickable for Ipv4Addr { - fn pick_single(str: Option<&str>) -> crate::PickerArgResult<Self> { - str.map_or(crate::PickerArgResult::NotFound, |s| { - s.parse::<Self>() - .map_or(crate::PickerArgResult::NotFound, |addr| { - crate::PickerArgResult::Parsed(addr) - }) - }) - } -} - -impl SinglePickable for Ipv6Addr { - fn pick_single(str: Option<&str>) -> crate::PickerArgResult<Self> { - str.map_or(crate::PickerArgResult::NotFound, |s| { - s.parse::<Self>() - .map_or(crate::PickerArgResult::NotFound, |addr| { - crate::PickerArgResult::Parsed(addr) - }) - }) - } -} diff --git a/arg_picker/src/builtin/pick_numbers.rs b/arg_picker/src/builtin/pick_numbers.rs deleted file mode 100644 index 3a8f380..0000000 --- a/arg_picker/src/builtin/pick_numbers.rs +++ /dev/null @@ -1,78 +0,0 @@ -// Doc Not Optimize -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 i = usize::from(bytes[0] == b'-' || bytes[0] == b'+'); - 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::<Self>().is_err() - } -} - -impl BoundaryCheck for f64 { - fn check_boundary(raw: &str) -> bool { - !is_float_like(raw) || raw.parse::<Self>().is_err() - } -} diff --git a/arg_picker/src/builtin/pick_pathbuf.rs b/arg_picker/src/builtin/pick_pathbuf.rs deleted file mode 100644 index ec2cae1..0000000 --- a/arg_picker/src/builtin/pick_pathbuf.rs +++ /dev/null @@ -1,15 +0,0 @@ -// Doc Not Optimize -use std::path::PathBuf; - -use crate::{ - PickerArgResult::{NotFound, Parsed}, - SinglePickable, -}; - -impl SinglePickable for PathBuf { - fn pick_single(str: Option<&str>) -> crate::PickerArgResult<Self> { - str.map_or(NotFound, |str| { - just_fmt::fmt_path_str(str).map_or(NotFound, |formated| Parsed(Self::from(formated))) - }) - } -} diff --git a/arg_picker/src/builtin/pick_paths.rs b/arg_picker/src/builtin/pick_paths.rs deleted file mode 100644 index d5edc65..0000000 --- a/arg_picker/src/builtin/pick_paths.rs +++ /dev/null @@ -1,168 +0,0 @@ -// Doc Not Optimize -use std::{ - fs, - path::{Path, PathBuf}, -}; - -use crate::{ - PickerArgResult::{self, NotFound, Parsed, Unparsed}, - SinglePickable, - value::{ - DirPath, FilePath, NoDirPath, NoFilePath, NoPath, NoSymlinkPath, RecursiveFiles, - SymlinkPath, - }, -}; - -impl SinglePickable for FilePath { - fn pick_single(str: Option<&str>) -> PickerArgResult<Self> { - match <PathBuf as SinglePickable>::pick_single(str) { - Parsed(path) => { - if path.exists() && path.is_file() { - Parsed(Self::from(path)) - } else { - NotFound - } - } - Unparsed => Unparsed, - NotFound => NotFound, - } - } -} - -impl SinglePickable for NoFilePath { - fn pick_single(str: Option<&str>) -> PickerArgResult<Self> { - match <PathBuf as SinglePickable>::pick_single(str) { - Parsed(path) => { - if !path.exists() || !path.is_file() { - Parsed(Self::from(path)) - } else { - NotFound - } - } - Unparsed => Unparsed, - NotFound => NotFound, - } - } -} - -impl SinglePickable for DirPath { - fn pick_single(str: Option<&str>) -> PickerArgResult<Self> { - match <PathBuf as SinglePickable>::pick_single(str) { - Parsed(path) => { - if path.exists() && path.is_dir() { - Parsed(Self::from(path)) - } else { - NotFound - } - } - Unparsed => Unparsed, - NotFound => NotFound, - } - } -} - -impl SinglePickable for NoDirPath { - fn pick_single(str: Option<&str>) -> PickerArgResult<Self> { - match <PathBuf as SinglePickable>::pick_single(str) { - Parsed(path) => { - if !path.exists() || !path.is_dir() { - Parsed(Self::from(path)) - } else { - NotFound - } - } - Unparsed => Unparsed, - NotFound => NotFound, - } - } -} - -impl SinglePickable for SymlinkPath { - fn pick_single(str: Option<&str>) -> PickerArgResult<Self> { - match <PathBuf as SinglePickable>::pick_single(str) { - Parsed(path) => { - if path.exists() && path.is_symlink() { - Parsed(Self::from(path)) - } else { - NotFound - } - } - Unparsed => Unparsed, - NotFound => NotFound, - } - } -} - -impl SinglePickable for NoSymlinkPath { - fn pick_single(str: Option<&str>) -> PickerArgResult<Self> { - match <PathBuf as SinglePickable>::pick_single(str) { - Parsed(path) => { - if !path.exists() || !path.is_symlink() { - Parsed(Self::from(path)) - } else { - NotFound - } - } - Unparsed => Unparsed, - NotFound => NotFound, - } - } -} - -impl SinglePickable for NoPath { - fn pick_single(str: Option<&str>) -> PickerArgResult<Self> { - match <PathBuf as SinglePickable>::pick_single(str) { - Parsed(path) => { - if path.exists() { - NotFound - } else { - Parsed(Self::from(path)) - } - } - Unparsed => Unparsed, - NotFound => NotFound, - } - } -} - -impl SinglePickable for RecursiveFiles { - fn pick_single(str: Option<&str>) -> PickerArgResult<Self> { - match <PathBuf as SinglePickable>::pick_single(str) { - Parsed(path) => { - if !path.exists() { - return NotFound; - } - if path.is_file() || path.is_symlink() { - return Parsed(Self::from(vec![path])); - } - let mut entries = Vec::new(); - if let Ok(dir_entries) = fs::read_dir(&path) { - for entry in dir_entries.flatten() { - let entry_path = entry.path(); - if entry_path.is_file() || entry_path.is_symlink() { - entries.push(entry_path); - } else if entry_path.is_dir() { - collect_files(&entry_path, &mut entries); - } - } - } - Parsed(Self::from(entries)) - } - Unparsed => Unparsed, - NotFound => NotFound, - } - } -} - -fn collect_files(dir: &Path, entries: &mut Vec<PathBuf>) { - if let Ok(dir_entries) = fs::read_dir(dir) { - for entry in dir_entries.flatten() { - let entry_path = entry.path(); - if entry_path.is_file() || entry_path.is_symlink() { - entries.push(entry_path); - } else if entry_path.is_dir() { - collect_files(&entry_path, entries); - } - } - } -} diff --git a/arg_picker/src/builtin/pick_picker_args.rs b/arg_picker/src/builtin/pick_picker_args.rs deleted file mode 100644 index ea72ef1..0000000 --- a/arg_picker/src/builtin/pick_picker_args.rs +++ /dev/null @@ -1,22 +0,0 @@ -// Doc Not Optimize -use crate::{PickerArgResult::Parsed, PickerArgs, parselib::build_masked_args, pickable_needed::*}; - -impl<'a> Pickable<'a> for PickerArgs<'a> { - fn get_attr(_flag: &'a PickerArg<'a, Self>) -> PickerArgAttr { - // Use the lowest priority attribute - PickerArgAttr::Postprocess - } - - fn tag(ctx: TagPhaseContext) -> Vec<usize> { - // Collect all remaining raw index values - build_masked_args(ctx.args, ctx.mask) - .iter() - .map(|m| m.raw_idx) - .collect() - } - - fn pick(raw_strs: &[&str]) -> PickerArgResult<Self> { - let remains: Vec<String> = raw_strs.iter().map(ToString::to_string).collect(); - Parsed(PickerArgs::Owned(remains)) - } -} diff --git a/arg_picker/src/builtin/pick_socket_attr.rs b/arg_picker/src/builtin/pick_socket_attr.rs deleted file mode 100644 index c227b2b..0000000 --- a/arg_picker/src/builtin/pick_socket_attr.rs +++ /dev/null @@ -1,37 +0,0 @@ -// Doc Not Optimize -use std::net::{SocketAddr, SocketAddrV4, SocketAddrV6}; - -use crate::SinglePickable; - -impl SinglePickable for SocketAddr { - fn pick_single(str: Option<&str>) -> crate::PickerArgResult<Self> { - str.map_or(crate::PickerArgResult::NotFound, |s| { - s.parse::<Self>() - .map_or(crate::PickerArgResult::NotFound, |addr| { - crate::PickerArgResult::Parsed(addr) - }) - }) - } -} - -impl SinglePickable for SocketAddrV4 { - fn pick_single(str: Option<&str>) -> crate::PickerArgResult<Self> { - str.map_or(crate::PickerArgResult::NotFound, |s| { - s.parse::<Self>() - .map_or(crate::PickerArgResult::NotFound, |addr| { - crate::PickerArgResult::Parsed(addr) - }) - }) - } -} - -impl SinglePickable for SocketAddrV6 { - fn pick_single(str: Option<&str>) -> crate::PickerArgResult<Self> { - str.map_or(crate::PickerArgResult::NotFound, |s| { - s.parse::<Self>() - .map_or(crate::PickerArgResult::NotFound, |addr| { - crate::PickerArgResult::Parsed(addr) - }) - }) - } -} diff --git a/arg_picker/src/builtin/pick_string.rs b/arg_picker/src/builtin/pick_string.rs deleted file mode 100644 index 0a08693..0000000 --- a/arg_picker/src/builtin/pick_string.rs +++ /dev/null @@ -1,9 +0,0 @@ -// Doc Not Optimize -use crate::PickerArgResult::NotFound; -use crate::{SinglePickable, pickable_needed::*}; - -impl SinglePickable for String { - fn pick_single(str: Option<&str>) -> PickerArgResult<Self> { - str.map_or(NotFound, |str| PickerArgResult::Parsed(str.to_string())) - } -} |
