mod account;
pub use account::*;
mod clean;
pub use clean::*;
mod developer;
pub use developer::*;
mod start;
pub use start::*;
mod update;
pub use 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 = "snarkOS", 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(subcommand)]
Account(Account),
#[clap(name = "clean")]
Clean(Clean),
#[clap(subcommand)]
Developer(Developer),
#[clap(name = "start")]
Start(Box<Start>),
#[clap(name = "update")]
Update(Update),
}
impl Command {
pub fn parse(self) -> Result<String> {
match self {
Self::Account(command) => command.parse(),
Self::Clean(command) => command.parse(),
Self::Developer(command) => command.parse(),
Self::Start(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()
}
}