isk 0.1.4

A command line tool for isksss.
Documentation
use clap::{Parser, Subcommand};
use isk::subcmd::dot;
use isk::subcmd::paper;
use isk::subcmd::rand;

#[derive(Parser)]
#[command(author, version, about, long_about = None)]
struct Cli {
    #[command(subcommand)]
    command: Option<Commands>,
}

#[derive(Subcommand)]
enum Commands {
    #[command(about = "paper management")]
    Paper {
        #[command(subcommand)]
        cmd: Option<PaperCommands>,
    },

    #[command(about = "dotfiles management")]
    Dot {
        #[command(subcommand)]
        cmd: Option<DotCommands>,
    },

    #[command(about = "random")]
    Rand {
        #[arg(short, long, default_value = "3")]
        num: u32,
    },
}

#[derive(Subcommand)]
enum PaperCommands {
    #[command(about = "download paper")]
    Download,
    #[command(about = "create paper.toml")]
    Init,
    #[command(about = "run server")]
    Run,
}

#[derive(Subcommand)]
enum DotCommands {
    #[command(about = "create dotfiles")]
    Clone {
        #[arg(short, long, default_value = "isksss/dotfiles")]
        repo: String,
    },
}

fn main() {
    let cli = Cli::parse();

    match &cli.command {
        Some(Commands::Paper { cmd }) => match cmd {
            Some(PaperCommands::Download) => paper::download(),
            Some(PaperCommands::Init) => paper::create_config(),
            Some(PaperCommands::Run) => paper::run_server(),
            None => {}
        },
        Some(Commands::Dot { cmd }) => match cmd {
            Some(DotCommands::Clone { repo }) => dot::clone_dotfiles(repo),
            None => {}
        },
        Some(Commands::Rand { num }) => {
            rand::rand(*num);
        }

        None => {
            println!("コマンドがありません");
        }
    }
}