use std::fs;
use clap::Parser;
const BASIC_CARGO_TEMPLATE: &str = include_str!("../templates/Cargo.toml.template");
const BASIC_MAIN_TEMPLATE: &str = include_str!("../templates/main.rs.template");
const AXUM_CARGO_TEMPLATE: &str = include_str!("../templates/axum/Cargo.toml.template");
const AXUM_MAIN_TEMPLATE: &str = include_str!("../templates/axum/main.rs.template");
const GITIGNORE_TEMPLATE: &str = include_str!("../templates/.gitignore.template");
#[derive(Parser)]
#[command(author, version, about)]
struct Args {
name: String,
#[arg(short, long, default_value = "basic")]
template: String,
}
fn main() -> std::io::Result<()> {
let args = Args::parse();
let project_name = &args.name;
let template = args.template.as_str();
fs::create_dir_all(format!("{}/src", project_name))?;
let (cargo_template, main_template) = match template {
"axum" => (AXUM_CARGO_TEMPLATE, AXUM_MAIN_TEMPLATE),
_ => (BASIC_CARGO_TEMPLATE, BASIC_MAIN_TEMPLATE),
};
let cargo_toml = cargo_template.replace("{{PROJECT_NAME}}", project_name);
fs::write(format!("{}/Cargo.toml", project_name), cargo_toml)?;
fs::write(format!("{}/src/main.rs", project_name), main_template)?;
fs::write(format!("{}/.gitignore", project_name), GITIGNORE_TEMPLATE)?;
std::process::Command::new("git")
.args(&["init"])
.current_dir(project_name)
.output()
.ok();
println!("✅ Project '{}' created successfully!", project_name);
println!("👉 cd {} && cargo run", project_name);
Ok(())
}