From 7bee2e096817c700ef0bd67c3235b770864a6ef9 Mon Sep 17 00:00:00 2001 From: ssrlive <30760636+ssrlive@users.noreply.github.com> Date: Tue, 9 Apr 2024 14:24:22 +0800 Subject: [PATCH] TryFrom for ArgProxy --- src/android.rs | 2 +- src/apple.rs | 2 +- src/args.rs | 7 ++++--- src/desktop_api.rs | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/android.rs b/src/android.rs index 0f62d1c..52d6af3 100644 --- a/src/android.rs +++ b/src/android.rs @@ -35,7 +35,7 @@ pub unsafe extern "C" fn Java_com_github_shadowsocks_bg_Tun2proxy_run( .with_filter(filter), ); let proxy_url = get_java_string(&mut env, &proxy_url).unwrap(); - let proxy = ArgProxy::from_url(proxy_url).unwrap(); + let proxy = ArgProxy::try_from(proxy_url).unwrap(); let mut args = Args::default(); args.proxy(proxy).tun_fd(Some(tun_fd)).dns(dns).verbosity(verbosity); diff --git a/src/apple.rs b/src/apple.rs index 87fc81b..0a5d1c3 100644 --- a/src/apple.rs +++ b/src/apple.rs @@ -31,7 +31,7 @@ pub unsafe extern "C" fn tun2proxy_with_fd_run( } let proxy_url = std::ffi::CStr::from_ptr(proxy_url).to_str().unwrap(); - let proxy = ArgProxy::from_url(proxy_url).unwrap(); + let proxy = ArgProxy::try_from(proxy_url).unwrap(); let mut args = Args::default(); args.proxy(proxy).tun_fd(Some(tun_fd)).dns(dns_strategy).verbosity(verbosity); diff --git a/src/args.rs b/src/args.rs index 46c00e8..b37521f 100644 --- a/src/args.rs +++ b/src/args.rs @@ -13,7 +13,7 @@ pub struct Args { /// where proto is one of socks4, socks5, http. /// Username and password are encoded in percent encoding. For example: /// socks5://myname:pass%40word@127.0.0.1:1080 - #[arg(short, long, value_parser = ArgProxy::from_url, value_name = "URL")] + #[arg(short, long, value_parser = |s: &str| ArgProxy::try_from(s), value_name = "URL")] pub proxy: ArgProxy, /// Name of the tun interface, such as tun0, utun4, etc. @@ -297,8 +297,9 @@ impl std::fmt::Display for ArgProxy { } } -impl ArgProxy { - pub fn from_url(s: &str) -> Result { +impl TryFrom<&str> for ArgProxy { + type Error = Error; + fn try_from(s: &str) -> Result { if s == "none" { return Ok(ArgProxy { proxy_type: ProxyType::None, diff --git a/src/desktop_api.rs b/src/desktop_api.rs index 44f16c4..15288ef 100644 --- a/src/desktop_api.rs +++ b/src/desktop_api.rs @@ -47,7 +47,7 @@ pub unsafe extern "C" fn tun2proxy_with_name_run( } let proxy_url = std::ffi::CStr::from_ptr(proxy_url).to_str().unwrap(); - let proxy = ArgProxy::from_url(proxy_url).unwrap(); + let proxy = ArgProxy::try_from(proxy_url).unwrap(); let tun = std::ffi::CStr::from_ptr(tun).to_str().unwrap().to_string(); let mut args = Args::default();