58 lines
1.7 KiB
Rust
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(())
|
|
}
|
|
}
|