imgurs/src/cli/parse.rs

77 lines
2.1 KiB
Rust
Raw Normal View History

use clap::{Command, IntoApp, Parser, Subcommand};
2022-01-25 16:14:23 +00:00
use clap_complete::{generate, Generator, Shell};
use imgurs::ImgurClient;
2022-02-27 11:06:34 +00:00
use std::io::{self, stdout};
2022-01-22 21:02:51 +00:00
2022-01-23 12:05:32 +00:00
use crate::cli::{credits::*, delete_image::*, info_image::*, upload_image::*};
2022-01-22 21:02:51 +00:00
2022-06-12 15:28:25 +00:00
// get version from Cargo.toml
2022-01-22 21:02:51 +00:00
const VERSION: Option<&str> = option_env!("CARGO_PKG_VERSION");
#[derive(Parser, Debug)]
#[clap(
2022-06-12 15:28:25 +00:00
name = "imgurs",
2022-01-22 21:02:51 +00:00
about = "Imgur API CLI", long_about = None,
version = VERSION.unwrap_or("unknown")
)]
struct Cli {
#[clap(subcommand)]
command: Commands,
}
#[derive(Subcommand, Debug)]
enum Commands {
#[clap(about = "Print Client Rate Limit", display_order = 1)]
2022-01-22 21:02:51 +00:00
Credits,
#[clap(about = "Upload image to Imgur", display_order = 2)]
2022-01-22 21:14:26 +00:00
Upload { path: String },
2022-01-22 21:02:51 +00:00
#[clap(about = "Delete image from Imgur", display_order = 3)]
2022-01-22 21:14:26 +00:00
Delete { delete_hash: String },
2022-01-23 12:05:32 +00:00
#[clap(about = "Print image info", display_order = 4)]
2022-01-23 12:05:32 +00:00
Info { id: String },
2022-01-25 16:13:43 +00:00
2022-02-27 11:06:34 +00:00
#[clap(
about = "Generate completion file for a shell [bash, elvish, fish, powershell, zsh]",
display_order = 5
)]
Completions { shell: Shell },
#[clap(about = "Generate man page", display_order = 6)]
Manpage,
2022-01-25 16:13:43 +00:00
}
fn print_completions<G: Generator>(gen: G, app: &mut Command) {
2022-01-25 16:13:43 +00:00
generate(gen, app, app.get_name().to_string(), &mut stdout())
2022-01-22 21:02:51 +00:00
}
2022-06-12 15:28:25 +00:00
#[tokio::main]
pub async fn parse(client: ImgurClient) {
2022-01-22 21:02:51 +00:00
let args = Cli::parse();
match args.command {
Commands::Credits => credits(client).await,
2022-01-22 21:02:51 +00:00
Commands::Upload { path } => upload_image(client, path.to_string()).await,
2022-01-22 21:02:51 +00:00
Commands::Delete { delete_hash } => delete_image(client, delete_hash.to_string()).await,
2022-01-23 12:05:32 +00:00
Commands::Info { id } => image_info(client, id.to_string()).await,
2022-01-25 16:13:43 +00:00
Commands::Completions { shell } => {
let mut app = Cli::command();
2022-01-25 16:13:43 +00:00
print_completions(shell, &mut app)
2022-01-25 16:13:43 +00:00
}
Commands::Manpage => {
let clap_app = Cli::command();
let man = clap_mangen::Man::new(clap_app);
man.render(&mut io::stdout()).expect("generate manpage")
}
2022-01-22 21:02:51 +00:00
}
}