feat: Use subcommands instead of flags for mode

This commit is contained in:
newbee1905
2023-02-05 02:37:40 +07:00
parent c0d17dd230
commit 6bd2ad922c

View File

@@ -10,11 +10,22 @@ use crate::anime::trackers::*;
use crate::get_token; use crate::get_token;
use crate::helpers::take_input::{int_input, string_input}; use crate::helpers::take_input::{int_input, string_input};
use clap::Parser; use clap::{Parser, Subcommand};
#[derive(Subcommand, Debug)]
enum KamiMode {
#[command(name = "ln", about = "Search Light Novel to read.")]
LightNovel,
#[command(about = "Search Anime to read.")]
Anime,
}
#[derive(Parser, Debug)] #[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)] #[command(author, version, about = "A scraper to read light novels and watch anime in your terminal.", long_about = None)]
struct Args { struct Args {
#[command(subcommand)]
mode: Option<KamiMode>,
/// Use anime mode /// Use anime mode
#[arg(short, long)] #[arg(short, long)]
anime: bool, anime: bool,
@@ -38,33 +49,32 @@ struct Args {
} }
fn main() { fn main() {
let mut args = Args::parse(); let args = Args::parse();
if args.anime == false && args.ln == false { let mode = match &args.mode {
println!("1: Anime"); None => {
println!("2: Light Novel"); println!("1: Anime");
println!("2: Light Novel");
let a = int_input("pick your poison: "); let opt = int_input("pick your poison: ");
match a {
1 => args.anime = true,
2 => args.ln = true,
_ => println!("invalid option. "),
};
}
if args.anime == true && args.ln == true {
println!("you can only use one of the arguments at a time");
std::process::exit(0);
}
if args.ln == true { match opt {
//ln_read(&search, chapter); 1 => &KamiMode::Anime,
_ = ln_ui(args.chapter, args.reader); 2 => &KamiMode::LightNovel,
} else if args.anime == true { _ => {
//anime_stream(search, episode, resume); println!("invalid option.");
std::process::exit(0);
}
}
}
Some(m) => m,
};
let token = get_token(); let _ = match mode {
_ = anime_ui(token, args.provider, (args.cast == "0", args.cast)); &KamiMode::LightNovel => ln_ui(args.chapter, args.reader),
} else { &KamiMode::Anime => {
println!("Invalid argument"); let token = get_token();
} anime_ui(token, args.provider, (args.cast == "0", args.cast))
}
};
} }