From 2cb8893711b73ccde946ca83e01dc315a9294c23 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Sun, 26 Jul 2026 03:03:16 +0800 Subject: feat(arg_picker): add SinglePickable impls for network and path types Implement SinglePickable for IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6, and PathBuf --- arg_picker/src/builtin/pick_socket_attr.rs | 39 ++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 arg_picker/src/builtin/pick_socket_attr.rs (limited to 'arg_picker/src/builtin/pick_socket_attr.rs') 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 { + match str { + Some(s) => match s.parse::() { + 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 { + match str { + Some(s) => match s.parse::() { + 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 { + match str { + Some(s) => match s.parse::() { + Ok(addr) => crate::PickerArgResult::Parsed(addr), + Err(_) => crate::PickerArgResult::NotFound, + }, + None => crate::PickerArgResult::NotFound, + } + } +} -- cgit