shulkerscript-cli/src/cli.rs

58 lines
1.7 KiB
Rust

use crate::subcommands::{self, BuildArgs, CleanArgs, InitArgs};
use clap::{Parser, Subcommand};
use color_eyre::eyre::Result;
#[derive(Debug, Parser)]
#[command(version, about, long_about = None)]
pub struct Args {
#[command(subcommand)]
cmd: Command,
/// Enable verbose output.
#[clap(short, long)]
verbose: bool,
}
#[derive(Debug, Clone, Subcommand)]
pub enum Command {
/// Initialize a new project.
Init(InitArgs),
/// Build the project.
Build(BuildArgs),
/// Clean build artifacts.
/// This will remove the `dist` directory.
Clean(CleanArgs),
#[cfg(feature = "zip")]
/// Build and package the project.
Package(subcommands::PackageArgs),
#[cfg(feature = "watch")]
/// Watch for changes and execute command.
Watch(subcommands::WatchArgs),
#[cfg(feature = "lang-debug")]
/// Build the project and dump the intermediate state.
LangDebug(subcommands::LangDebugArgs),
}
impl Args {
pub fn run(&self) -> Result<()> {
self.cmd.run(self.verbose)
}
}
impl Command {
pub fn run(&self, verbose: bool) -> Result<()> {
match self {
Command::Init(args) => subcommands::init(verbose, args)?,
Command::Build(args) => subcommands::build(verbose, args)?,
Command::Clean(args) => subcommands::clean(verbose, args)?,
#[cfg(feature = "zip")]
Command::Package(args) => subcommands::package(verbose, args)?,
#[cfg(feature = "watch")]
Command::Watch(args) => subcommands::watch(verbose, args)?,
#[cfg(feature = "lang-debug")]
Command::LangDebug(args) => subcommands::lang_debug(args)?,
}
Ok(())
}
}