aboutsummaryrefslogtreecommitdiff
path: root/arg_picker/src/builtin/pick_socket_attr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'arg_picker/src/builtin/pick_socket_attr.rs')
-rw-r--r--arg_picker/src/builtin/pick_socket_attr.rs39
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,
+ }
+ }
+}