mod apps;
mod cargo;
mod cli;
mod commands;
mod generator;
mod naming;
mod project;
mod runtime;
mod templates;
mod timestamp;
use std::process::ExitCode;
use clap::Parser;
use crate::cli::{Cli, Command};
use crate::commands::make::Artifact;
use crate::commands::migrate::Action;
fn main() -> ExitCode {
let cli = Cli::parse();
let result = match cli.command {
Command::New(args) => commands::new::run(&args),
Command::MakeModel(args) => commands::make::run(Artifact::Model, &args),
Command::MakeTools(args) => commands::make::run(Artifact::Tools, &args),
Command::MakeApp(args) => commands::make_app::run(&args),
Command::MakeMigration { name } => commands::migrate::run(Action::Generate { name: &name }),
Command::Migrate => commands::migrate::run(Action::Apply),
Command::MigrateStatus => commands::migrate::run(Action::Status),
Command::MigrateFresh { force } => commands::migrate::run(Action::Reset { force }),
Command::InstallFly(args) => commands::fly::install(&args),
Command::DeployFly(args) => commands::fly::deploy(&args),
Command::Build(args) => commands::build::run(&args),
Command::RouteList => commands::route::list(),
Command::RouteMatch { target } => commands::route::matches(&target),
Command::Serve(args) => commands::serve::run(&args),
Command::Doctor => commands::doctor::run(),
Command::AppSeparate { name } => commands::app::separate(&name),
Command::AppEmbed { name } => commands::app::embed(&name),
};
match result {
Ok(()) => ExitCode::SUCCESS,
Err(err) => {
eprintln!("error: {err:#}");
ExitCode::FAILURE
}
}
}