diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-07-26 03:03:16 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-07-26 03:03:16 +0800 |
| commit | 2cb8893711b73ccde946ca83e01dc315a9294c23 (patch) | |
| tree | c081d929c563a79e057fb319e6ceaf5fff51abfc /arg_picker/src/builtin/pick_socket_attr.rs | |
| parent | 451d2889211ebbae4965d61b94ec422d88cfe6c4 (diff) | |
Implement SinglePickable for IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr,
SocketAddrV4, SocketAddrV6, and PathBuf
Diffstat (limited to 'arg_picker/src/builtin/pick_socket_attr.rs')
| -rw-r--r-- | arg_picker/src/builtin/pick_socket_attr.rs | 39 |
1 files changed, 39 insertions, 0 deletions
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, + } + } +} |
