Files
shadowsocks-rust/src/bin/validator/mod.rs
T
zonyitoo 62832b9ad9 [#149] Setting timeout, udp_timeout, udp_max_associations from opt
Add ManagerConfig for encapsulating add manager's options
Removed Config.timeout, servers should always use ServerConfig.timeout
2020-06-01 21:55:00 +08:00

40 lines
1.1 KiB
Rust

//! Command line argument validator
#![allow(dead_code)]
use std::net::SocketAddr;
use shadowsocks::{relay::socks5::Address, ManagerAddr, ServerAddr, ServerConfig};
macro_rules! validate_type {
($name:ident, $ty:ty, $help:expr) => {
pub fn $name(v: String) -> Result<(), String> {
match v.parse::<$ty>() {
Ok(..) => Ok(()),
Err(..) => Err($help.to_owned()),
}
}
};
}
validate_type!(
validate_server_addr,
ServerAddr,
"should be either ip:port or domain:port"
);
validate_type!(validate_socket_addr, SocketAddr, "should be ip:port");
validate_type!(validate_address, Address, "should be either ip:port or domain:port");
validate_type!(
validate_manager_addr,
ManagerAddr,
"should be either ip:port, domain:port or /path/to/unix.sock"
);
validate_type!(validate_u64, u64, "should be unsigned integer");
pub fn validate_server_url(v: String) -> Result<(), String> {
match ServerConfig::from_url(&v) {
Ok(..) => Ok(()),
Err(..) => Err("should be SIP002 (https://shadowsocks.org/en/spec/SIP002-URI-Scheme.html) format".to_owned()),
}
}