2022-08-24 13:35:51 +00:00
|
|
|
use std::io::stdout;
|
|
|
|
|
|
|
|
use clap::{Command, CommandFactory, Parser};
|
2022-01-25 16:14:23 +00:00
|
|
|
use clap_complete::{generate, Generator, Shell};
|
2022-04-03 19:01:58 +00:00
|
|
|
use imgurs::ImgurClient;
|
2022-08-24 13:35:51 +00:00
|
|
|
use simple_logger::SimpleLogger;
|
2022-01-22 21:02:51 +00:00
|
|
|
|
2022-10-01 16:43:08 +00:00
|
|
|
use crate::imgur::*;
|
|
|
|
|
2022-08-24 13:35:51 +00:00
|
|
|
mod config;
|
|
|
|
mod imgur;
|
2022-01-22 21:02:51 +00:00
|
|
|
|
|
|
|
#[derive(Parser, Debug)]
|
|
|
|
#[clap(
|
2022-06-12 15:28:25 +00:00
|
|
|
name = "imgurs",
|
2022-10-01 16:43:08 +00:00
|
|
|
about = "Imgur API CLI",
|
|
|
|
long_about = env!("CARGO_PKG_DESCRIPTION"),
|
2022-08-24 13:35:51 +00:00
|
|
|
version = env!("CARGO_PKG_VERSION"),
|
2022-01-22 21:02:51 +00:00
|
|
|
)]
|
2022-08-24 13:35:51 +00:00
|
|
|
enum Cli {
|
2022-04-03 19:01:58 +00:00
|
|
|
#[clap(about = "Print Client Rate Limit", display_order = 1)]
|
2022-01-22 21:02:51 +00:00
|
|
|
Credits,
|
|
|
|
|
2022-02-27 11:06:02 +00:00
|
|
|
#[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
|
|
|
|
2022-02-27 11:06:02 +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
|
|
|
|
2022-02-27 11:06:02 +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
|
|
|
|
)]
|
2022-04-03 19:01:58 +00:00
|
|
|
Completions { shell: Shell },
|
2022-02-27 11:06:02 +00:00
|
|
|
|
|
|
|
#[clap(about = "Generate man page", display_order = 6)]
|
|
|
|
Manpage,
|
2022-01-25 16:13:43 +00:00
|
|
|
}
|
|
|
|
|
2022-06-12 15:28:25 +00:00
|
|
|
#[tokio::main]
|
2022-08-24 13:35:51 +00:00
|
|
|
async fn main() {
|
|
|
|
SimpleLogger::new().init().unwrap();
|
|
|
|
|
|
|
|
// parse config file
|
|
|
|
let config = config::toml::parse();
|
|
|
|
|
|
|
|
// create imgur client
|
|
|
|
let client = ImgurClient::new(&config.imgur.id);
|
|
|
|
|
2022-01-22 21:02:51 +00:00
|
|
|
let args = Cli::parse();
|
|
|
|
|
2022-08-24 13:35:51 +00:00
|
|
|
match args {
|
|
|
|
Cli::Credits => credits(client).await,
|
2022-01-22 21:02:51 +00:00
|
|
|
|
2022-10-01 16:43:08 +00:00
|
|
|
Cli::Upload { path } => upload_image(client, path).await,
|
2022-01-22 21:02:51 +00:00
|
|
|
|
2022-08-24 13:35:51 +00:00
|
|
|
Cli::Delete { delete_hash } => delete_image(client, delete_hash.to_string()).await,
|
2022-01-23 12:05:32 +00:00
|
|
|
|
2022-08-24 13:35:51 +00:00
|
|
|
Cli::Info { id } => image_info(client, id.to_string()).await,
|
2022-01-25 16:13:43 +00:00
|
|
|
|
2022-08-24 13:35:51 +00:00
|
|
|
Cli::Completions { shell } => {
|
2022-02-25 17:24:24 +00:00
|
|
|
let mut app = Cli::command();
|
2022-01-25 16:13:43 +00:00
|
|
|
|
2022-08-24 13:35:51 +00:00
|
|
|
fn print_completions<G: Generator>(gen: G, app: &mut Command) {
|
|
|
|
generate(gen, app, app.get_name().to_string(), &mut stdout())
|
|
|
|
}
|
|
|
|
|
2022-04-03 19:01:58 +00:00
|
|
|
print_completions(shell, &mut app)
|
2022-10-01 16:43:08 +00:00
|
|
|
},
|
2022-02-27 11:06:02 +00:00
|
|
|
|
2022-08-24 13:35:51 +00:00
|
|
|
Cli::Manpage => {
|
2022-02-27 11:06:02 +00:00
|
|
|
let clap_app = Cli::command();
|
|
|
|
let man = clap_mangen::Man::new(clap_app);
|
2022-04-03 19:01:58 +00:00
|
|
|
|
2022-08-24 13:35:51 +00:00
|
|
|
man.render(&mut stdout())
|
2022-10-01 16:43:08 +00:00
|
|
|
.expect("Failed to generate man page");
|
|
|
|
},
|
2022-01-22 21:02:51 +00:00
|
|
|
}
|
|
|
|
}
|