use clap::App; use clap::Arg; use clap::crate_authors; use clap::crate_version; pub fn server_app<'a>() -> App<'a, 'a> { App::new("fss") .author(crate_authors!()) .version(crate_version!()) .about("Filesystemsearch") .arg(self::common::arg_server_addr()) .arg(self::common::arg_server_port()) } pub fn client_app<'a>() -> App<'a, 'a> { App::new("fss") .author(crate_authors!()) .version(crate_version!()) .about("Filesystemsearch") .arg(self::common::arg_server_addr()) .arg(self::common::arg_server_port()) .subcommand(App::new("index") .version(crate_version!()) .about("Index a file") .arg(Arg::with_name("file") .required(true) .multiple(false) .value_name("FILE") .help("Index this file") ) ) .subcommand(App::new("search") .version(crate_version!()) .about("Search for a file") .arg(Arg::with_name("term") .required(true) .multiple(true) .value_name("TERM") .help("Search with these terms") ) ) } mod common { use clap::Arg; pub fn arg_server_addr<'a, 'b>() -> Arg<'a, 'b> { Arg::with_name("server_addr") .required(false) .multiple(false) .value_name("ADDR") .help("The address of the server") } pub fn arg_server_port<'a, 'b>() -> Arg<'a, 'b> { Arg::with_name("server_port") .required(false) .multiple(false) .value_name("PORT") .help("The port of the server") } }