use crate::{
core::{config::Config},
error::Error,
process, sub_process,
};
use clap::{AppSettings, Parser, Subcommand};
use self::commands::Commander;
#[macro_export]
macro_rules! alert_cli {
($msg: expr, $color_or_font: ident) => {
println!("{}", $msg.$color_or_font())
};
}
pub mod commands;
#[derive(Parser)]
#[clap(global_setting = AppSettings::DeriveDisplayOrder)]
#[clap(author = "Haider Ali")]
enum Cli {
Build,
Serve,
Start,
#[clap(subcommand)]
Add(AddCommand),
New {
name: String
},
Execute {
name: String
},
Commands
}
#[derive(Subcommand)]
enum AddCommand {
Route {
#[clap(long, default_value = "")]
to: String,
#[clap(long)]
name: String,
},
}
pub fn start() -> Result<(), Error> {
let args = Cli::parse();
match args {
Cli::Build => {
let config = Config::read_config()?;
sub_process(&config.source)?;
}
Cli::Add(AddCommand::Route { to, name }) => {
Commander::new_route(name, to)?;
}
Cli::Start => {
process()?;
},
Cli::New {name} => {
Commander::new_cmd(&name)?;
},
Cli::Execute { name } => {
Commander::execute_command(&name)?;
},
Cli::Commands => {
Commander::commands()?;
}
_ => (),
}
Ok(())
}