diff options
Diffstat (limited to 'cli/src/cli.rs')
-rw-r--r-- | cli/src/cli.rs | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/cli/src/cli.rs b/cli/src/cli.rs new file mode 100644 index 0000000..4b52ad6 --- /dev/null +++ b/cli/src/cli.rs @@ -0,0 +1,119 @@ +use clap::crate_authors; +use clap::crate_version; +use clap::App; +use clap::Arg; +use clap::ArgGroup; + +pub fn app<'a>() -> App<'a> { + App::new("distrox") + .author(crate_authors!()) + .version(crate_version!()) + .about("Distributed social network") + + .subcommand(App::new("profile") + .author(crate_authors!()) + .version(crate_version!()) + .about("Profile actions") + + .subcommand(App::new("create") + .author(crate_authors!()) + .version(crate_version!()) + .about("Create profile") + + .arg(Arg::new("name") + .long("name") + .required(true) + .takes_value(true) + .value_name("NAME") + .about("Name of the profile") + ) + ) + + .subcommand(App::new("serve") + .author(crate_authors!()) + .version(crate_version!()) + .about("Just serve the profile") + + .arg(Arg::new("name") + .long("name") + .required(true) + .takes_value(true) + .value_name("NAME") + .about("Name of the profile") + ) + + .arg(Arg::new("connect") + .long("connect") + .required(false) + .takes_value(true) + .multiple(true) + .value_name("MULTIADDR") + .about("Connect to MULTIADDR as well") + ) + + .arg(Arg::new("listen") + .long("listen") + .required(false) + .takes_value(true) + .multiple(true) + .value_name("MULTIADDR") + .about("Listen on MULTIADDR, e.g. '/ip4/127.0.0.1/tcp/10000'") + ) + ) + + .subcommand(App::new("cat") + .author(crate_authors!()) + .version(crate_version!()) + .about("Read complete timeline of profile") + + .arg(Arg::new("name") + .long("name") + .required(true) + .takes_value(true) + .value_name("NAME") + .about("Name of the profile") + ) + ) + + .subcommand(App::new("post") + .author(crate_authors!()) + .version(crate_version!()) + .about("Just serve the profile") + + .arg(Arg::new("name") + .long("name") + .required(true) + .takes_value(true) + .value_name("NAME") + .about("Name of the profile to post to") + ) + + .arg(Arg::new("editor") + .long("editor") + .short('e') + .required(false) + .takes_value(false) + .about("Launch the editor for the text to be posted") + .conflicts_with("text") + ) + .arg(Arg::new("text") + .long("text") + .required(true) + .takes_value(true) + .value_name("TEXT") + .about("The text to be posted") + .conflicts_with("editor") + ) + .group(ArgGroup::new("text-or-editor") + .args(&["text", "editor"]) + .required(true) // one must be present + ) + ) + ) + + .subcommand(App::new("gui") + .author(crate_authors!()) + .version(crate_version!()) + .about("Start the distrox gui") + ) +} |