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();