use clap::App;
use preftool_clap::ClapConfigExt;
use preftool_clap_derive::ClapConfig;
#[derive(ClapConfig)]
pub enum Binding {
Unencrypted {
#[preftool_clap(help = "Server host")]
host: String,
#[preftool_clap(help = "Server port")]
port: String,
},
Encrypted {
#[preftool_clap(help = "Server host")]
host: String,
#[preftool_clap(help = "Server port")]
port: String,
#[preftool_clap(help = "Server certificate (enables TLS)")]
cert: String,
},
}
#[derive(ClapConfig)]
pub struct Server {
binding: Binding,
}
#[test]
fn sets_host() {
let args = vec!["test", "--binding-host=localhost"];
let result = Server::from_cli_args(App::new("test"), args).unwrap();
assert_eq!(result.len(), 1);
assert_eq!(result.get("binding:host").unwrap(), "localhost");
assert_eq!(result.get("binding:port"), None);
}
#[test]
fn sets_port() {
let args = vec!["test", "--binding-port", "8080"];
let result = Server::from_cli_args(App::new("test"), args).unwrap();
assert_eq!(result.len(), 1);
assert_eq!(result.get("binding:port").unwrap(), "8080");
assert_eq!(result.get("binding:host"), None);
}
#[test]
fn sets_all() {
let args = vec![
"test",
"--binding-port",
"8080",
"--binding-host=otherhost",
"--binding-cert=somecert",
];
let result = Server::from_cli_args(App::new("test"), args).unwrap();
assert_eq!(result.len(), 3);
assert_eq!(result.get("binding:port").unwrap(), "8080");
assert_eq!(result.get("binding:host").unwrap(), "otherhost");
assert_eq!(result.get("binding:cert").unwrap(), "somecert");
}