diff options
Diffstat (limited to 'arg_picker')
| -rw-r--r-- | arg_picker/src/builtin.rs | 3 | ||||
| -rw-r--r-- | arg_picker/src/builtin/pick_ip_attr.rs | 39 | ||||
| -rw-r--r-- | arg_picker/src/builtin/pick_pathbuf.rs | 18 | ||||
| -rw-r--r-- | arg_picker/src/builtin/pick_socket_attr.rs | 39 |
4 files changed, 99 insertions, 0 deletions
diff --git a/arg_picker/src/builtin.rs b/arg_picker/src/builtin.rs index 1c698ba..b51590d 100644 --- a/arg_picker/src/builtin.rs +++ b/arg_picker/src/builtin.rs @@ -1,5 +1,8 @@ mod pick_bool; mod pick_flag; +mod pick_ip_attr; mod pick_numbers; +mod pick_pathbuf; mod pick_picker_args; +mod pick_socket_attr; mod pick_string; diff --git a/arg_picker/src/builtin/pick_ip_attr.rs b/arg_picker/src/builtin/pick_ip_attr.rs new file mode 100644 index 0000000..d68fa15 --- /dev/null +++ b/arg_picker/src/builtin/pick_ip_attr.rs @@ -0,0 +1,39 @@ +use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; + +use crate::SinglePickable; + +impl SinglePickable for IpAddr { + fn pick_single(str: Option<&str>) -> crate::PickerArgResult<Self> { + match str { + Some(s) => match s.parse::<IpAddr>() { + Ok(addr) => crate::PickerArgResult::Parsed(addr), + Err(_) => crate::PickerArgResult::NotFound, + }, + None => crate::PickerArgResult::NotFound, + } + } +} + +impl SinglePickable for Ipv4Addr { + fn pick_single(str: Option<&str>) -> crate::PickerArgResult<Self> { + match str { + Some(s) => match s.parse::<Ipv4Addr>() { + Ok(addr) => crate::PickerArgResult::Parsed(addr), + Err(_) => crate::PickerArgResult::NotFound, + }, + None => crate::PickerArgResult::NotFound, + } + } +} + +impl SinglePickable for Ipv6Addr { + fn pick_single(str: Option<&str>) -> crate::PickerArgResult<Self> { + match str { + Some(s) => match s.parse::<Ipv6Addr>() { + Ok(addr) => crate::PickerArgResult::Parsed(addr), + Err(_) => crate::PickerArgResult::NotFound, + }, + None => crate::PickerArgResult::NotFound, + } + } +} diff --git a/arg_picker/src/builtin/pick_pathbuf.rs b/arg_picker/src/builtin/pick_pathbuf.rs new file mode 100644 index 0000000..3bd4410 --- /dev/null +++ b/arg_picker/src/builtin/pick_pathbuf.rs @@ -0,0 +1,18 @@ +use std::path::PathBuf; + +use crate::{ + PickerArgResult::{NotFound, Parsed}, + SinglePickable, +}; + +impl SinglePickable for PathBuf { + fn pick_single(str: Option<&str>) -> crate::PickerArgResult<Self> { + match str { + Some(str) => match just_fmt::fmt_path_str(str) { + Ok(formated) => Parsed(PathBuf::from(formated)), + Err(_) => NotFound, + }, + None => NotFound, + } + } +} diff --git a/arg_picker/src/builtin/pick_socket_attr.rs b/arg_picker/src/builtin/pick_socket_attr.rs new file mode 100644 index 0000000..0c0dd71 --- /dev/null +++ b/arg_picker/src/builtin/pick_socket_attr.rs @@ -0,0 +1,39 @@ +use std::net::{SocketAddr, SocketAddrV4, SocketAddrV6}; + +use crate::SinglePickable; + +impl SinglePickable for SocketAddr { + fn pick_single(str: Option<&str>) -> crate::PickerArgResult<Self> { + match str { + Some(s) => match s.parse::<SocketAddr>() { + Ok(addr) => crate::PickerArgResult::Parsed(addr), + Err(_) => crate::PickerArgResult::NotFound, + }, + None => crate::PickerArgResult::NotFound, + } + } +} + +impl SinglePickable for SocketAddrV4 { + fn pick_single(str: Option<&str>) -> crate::PickerArgResult<Self> { + match str { + Some(s) => match s.parse::<SocketAddrV4>() { + Ok(addr) => crate::PickerArgResult::Parsed(addr), + Err(_) => crate::PickerArgResult::NotFound, + }, + None => crate::PickerArgResult::NotFound, + } + } +} + +impl SinglePickable for SocketAddrV6 { + fn pick_single(str: Option<&str>) -> crate::PickerArgResult<Self> { + match str { + Some(s) => match s.parse::<SocketAddrV6>() { + Ok(addr) => crate::PickerArgResult::Parsed(addr), + Err(_) => crate::PickerArgResult::NotFound, + }, + None => crate::PickerArgResult::NotFound, + } + } +} |
