help.rs
1 use std::ffi::OsString; 2 3 use crate::terminal as term; 4 use crate::terminal::args::{Args, Error, Help}; 5 6 use super::*; 7 8 pub const HELP: Help = Help { 9 name: "help", 10 description: "CLI help", 11 version: env!("CARGO_PKG_VERSION"), 12 usage: "Usage: rad help [--help]", 13 }; 14 15 const COMMANDS: &[Help] = &[ 16 rad_assign::HELP, 17 rad_auth::HELP, 18 rad_checkout::HELP, 19 rad_clone::HELP, 20 rad_fork::HELP, 21 rad_help::HELP, 22 rad_id::HELP, 23 rad_init::HELP, 24 rad_inspect::HELP, 25 rad_issue::HELP, 26 rad_ls::HELP, 27 rad_node::HELP, 28 rad_patch::HELP, 29 rad_path::HELP, 30 rad_review::HELP, 31 rad_rm::HELP, 32 rad_self::HELP, 33 rad_label::HELP, 34 rad_track::HELP, 35 rad_unassign::HELP, 36 rad_unlabel::HELP, 37 rad_untrack::HELP, 38 rad_remote::HELP, 39 rad_sync::HELP, 40 ]; 41 42 #[derive(Default)] 43 pub struct Options {} 44 45 impl Args for Options { 46 fn from_args(args: Vec<OsString>) -> anyhow::Result<(Self, Vec<OsString>)> { 47 use lexopt::prelude::*; 48 49 let mut parser = lexopt::Parser::from_args(args); 50 51 if let Some(arg) = parser.next()? { 52 match arg { 53 Long("help") | Short('h') => { 54 return Err(Error::Help.into()); 55 } 56 _ => return Err(anyhow::anyhow!(arg.unexpected())), 57 } 58 } 59 Ok((Options {}, vec![])) 60 } 61 } 62 63 pub fn run(_options: Options, ctx: impl term::Context) -> anyhow::Result<()> { 64 println!("Usage: rad <command> [--help]"); 65 66 if ctx.profile().is_err() { 67 println!(); 68 println!( 69 "{}", 70 term::format::highlight("It looks like this is your first time using radicle.") 71 ); 72 println!( 73 "{}", 74 term::format::highlight("To get started, use `rad auth` to authenticate.") 75 ); 76 println!(); 77 } 78 79 println!("Common `rad` commands used in various situations:"); 80 println!(); 81 82 for help in COMMANDS { 83 println!( 84 "\t{} {}", 85 term::format::bold(format!("{:-12}", help.name)), 86 term::format::dim(help.description) 87 ); 88 } 89 println!(); 90 println!("See `rad <command> --help` to learn about a specific command."); 91 println!(); 92 93 Ok(()) 94 }