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::{Parser, builder::Styles};
const HEADER_COLOR: Option<Color> = Some(Color::Ansi(AnsiColor::Yellow));
const LITERAL_COLOR: Option<Color> = Some(Color::Ansi(AnsiColor::Green));
const ERROR_COLOR: Option<Color> = Some(Color::Ansi(AnsiColor::Red));
const INVALID_COLOR: Option<Color> = Some(Color::Ansi(AnsiColor::Magenta));
const STYLES: Styles = Styles::plain()
.header(Style::new().bold().fg_color(HEADER_COLOR))
.usage(Style::new().bold().fg_color(HEADER_COLOR))
.error(Style::new().bold().fg_color(ERROR_COLOR))
.invalid(Style::new().fg_color(INVALID_COLOR))
.valid(Style::new().bold().fg_color(LITERAL_COLOR))
.literal(Style::new().bold().fg_color(LITERAL_COLOR));
#[derive(Debug, Parser)]
#[clap(name = "snarkOS", author, about, styles = STYLES, version)]
pub struct CLI {
#[clap(subcommand)]
pub command: Command,
#[clap(long, global = true)]
pub noupdater: bool,
}
#[derive(Debug, Parser)]
pub enum Command {
#[clap(subcommand)]
Account(Account),
#[clap(name = "clean")]
Clean(Clean),
#[clap(name = "developer", alias = "dev")]
Developer(Box<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()
}
}