1use clap::Parser;
2use crate::cmd::db::{DbCommand};
3
4mod generate;
5mod init;
6mod new;
7mod db;
8
9mod style {
10 use anstyle::*;
11 use clap::builder::Styles;
12
13 const HEADER: Style = AnsiColor::Green.on_default().effects(Effects::BOLD);
14 const USAGE: Style = AnsiColor::Green.on_default().effects(Effects::BOLD);
15 const LITERAL: Style = AnsiColor::Cyan.on_default().effects(Effects::BOLD);
16 const PLACEHOLDER: Style = AnsiColor::Cyan.on_default();
17 const ERROR: Style = AnsiColor::Red.on_default().effects(Effects::BOLD);
18 const VALID: Style = AnsiColor::Cyan.on_default().effects(Effects::BOLD);
19 const INVALID: Style = AnsiColor::Yellow.on_default().effects(Effects::BOLD);
20
21 pub const STYLES: Styles = {
22 Styles::styled()
23 .header(HEADER)
24 .usage(USAGE)
25 .literal(LITERAL)
26 .placeholder(PLACEHOLDER)
27 .error(ERROR)
28 .valid(VALID)
29 .invalid(INVALID)
30 .error(ERROR)
31 };
32}
33
34#[derive(Debug, Parser)]
35#[command(author, version, about, styles(style::STYLES))]
36pub enum Commands {
37 New(new::NewAppCommand),
39 Init(init::InitCommand),
41 #[command(alias = "gen")]
43 Generate(generate::Generate),
44 Db(DbCommand)
46}
47
48impl Commands {
49 pub fn run(self) -> anyhow::Result<()> {
50 match self {
51 Commands::New(cmd) => cmd.run(),
52 Commands::Init(cmd) => cmd.run(),
53 Commands::Generate(cmd) => cmd.run(),
54 Commands::Db(cmd) => { cmd.run()}
55 }
56 }
57}