#![cfg(feature = "cli")]
pub use self::{build::Build, init::Init, serve::Serve, watch::Watch};
use ccli::{clap, clap::Parser, App};
mod build;
mod init;
mod serve;
mod watch;
#[derive(Debug, Parser)]
pub enum Command {
Build(Box<Build>),
Init(Init),
Serve(Serve),
Watch(Watch),
}
#[derive(Debug, Parser)]
#[clap(author, version)]
pub struct Sonata {
#[clap(short, long, action = clap::ArgAction::Count)]
#[arg(global = true)]
pub verbose: u8,
#[clap(subcommand)]
pub command: Command,
}
impl App for Sonata {
fn verbose(&self) -> u8 {
self.verbose
}
fn run(&self) -> anyhow::Result<()> {
match &self.command {
Command::Build(build) => build.run(),
Command::Init(init) => init.run(),
Command::Serve(serve) => serve.run(),
Command::Watch(watch) => watch.run(),
}
}
}