use eyre::{eyre, Result};
use log::info;
use crate::template::{TemplateName, TEMPLATE};
pub struct InitArgs {
pub project_name: String,
}
pub fn run(args: InitArgs) -> Result<()> {
crate::tailwind::installer::check_or_install()?;
create_project_dir(&args.project_name)?;
std::fs::create_dir_all(format!("{}/src", args.project_name))?;
std::fs::create_dir_all(format!("{}/dist", args.project_name))?;
let ctx: minijinja::Value = minijinja::context! {};
let template = TEMPLATE.render(TemplateName::TailwindConfig, &ctx);
let file_path = format!("{}/tailwind.config.js", args.project_name);
std::fs::write(file_path, template)?;
let ctx: minijinja::Value = minijinja::context! { project_name => args.project_name.clone() };
let template = TEMPLATE.render(TemplateName::ProjectIndex, &ctx);
let file_path = format!("{}/index.html", args.project_name);
std::fs::write(file_path, template)?;
let ctx: minijinja::Value = minijinja::context! { project_name => args.project_name.clone() };
let template = TEMPLATE.render(TemplateName::ProjectCss, &ctx);
let file_path = format!("{}/src/app.css", args.project_name);
std::fs::write(file_path, template)?;
let file_path = format!("{}/dist/app.css", args.project_name);
std::fs::write(file_path, "")?;
info!("Created project {}", args.project_name);
info!("Run `easywind start {}` to get to work", args.project_name);
Ok(())
}
fn create_project_dir(project_name: &str) -> Result<()> {
let dir = std::path::Path::new(project_name);
if dir.exists() {
return Err(eyre!(
"directory {project_name}/ already exists, please try a different project name",
));
}
std::fs::create_dir_all(dir)?;
Ok(())
}