use crate::cli::commands::{Build, Clean, Execute, New, Run, Update};
use anstyle::{AnsiColor, Color, Style};
use anyhow::Result;
use clap::{builder::Styles, Parser};
const HEADER_COLOR: Option<Color> = Some(Color::Ansi(AnsiColor::Yellow));
const LITERAL_COLOR: Option<Color> = Some(Color::Ansi(AnsiColor::Green));
const STYLES: Styles = Styles::plain()
.header(Style::new().bold().fg_color(HEADER_COLOR))
.usage(Style::new().bold().fg_color(HEADER_COLOR))
.literal(Style::new().bold().fg_color(LITERAL_COLOR));
#[derive(Debug, Parser)]
#[clap(name = "snarkVM", author = "The Aleo Team <hello@aleo.org>", styles = STYLES)]
pub struct CLI {
#[clap(default_value = "2", short, long)]
pub verbosity: u8,
#[clap(subcommand)]
pub command: Command,
}
#[derive(Debug, Parser)]
pub enum Command {
#[clap(name = "build")]
Build(Build),
#[clap(name = "clean")]
Clean(Clean),
#[clap(name = "execute")]
Execute(Execute),
#[clap(name = "new")]
New(New),
#[clap(name = "run")]
Run(Run),
#[clap(name = "update")]
Update(Update),
}
impl Command {
pub fn parse(self) -> Result<String> {
match self {
Self::Build(command) => command.parse(),
Self::Clean(command) => command.parse(),
Self::Execute(command) => command.parse(),
Self::New(command) => command.parse(),
Self::Run(command) => command.parse(),
Self::Update(command) => command.parse(),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn verify_cli() {
use clap::CommandFactory;
CLI::command().debug_assert()
}
}