summaryrefslogtreecommitdiffstats
path: root/cli/src/cli.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/src/cli.rs')
-rw-r--r--cli/src/cli.rs119
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")
+ )
+}