// Post-generation hook: creates crates based on user input let crates_input = variable::get("crates"); let project_name = variable::get("project-name"); let author = variable::get("author"); let license = variable::get("license"); // Parse comma-separated crate names let crate_names = crates_input.split(","); for crate_name in crate_names { let crate_name = crate_name.trim(); if crate_name.is_empty() { continue; } let crate_dir = `crates/${crate_name}`; let src_dir = `${crate_dir}/src`; // Create directories file::create_dir(crate_dir); file::create_dir(src_dir); // Determine if this looks like a binary crate let is_bin = crate_name.contains("cli") || crate_name.contains("bin") || crate_name == "app"; // Create Cargo.toml let cargo_toml = `[package] name = "${project_name}-${crate_name}" version.workspace = true edition.workspace = true authors.workspace = true license.workspace = true description = "" [dependencies] [lints] workspace = true `; if is_bin { cargo_toml = `[package] name = "${project_name}-${crate_name}" version.workspace = true edition.workspace = true authors.workspace = true license.workspace = true description = "" [[bin]] name = "${project_name}" path = "src/main.rs" [dependencies] [lints] workspace = true `; } file::write(`${crate_dir}/Cargo.toml`, cargo_toml); // Create src/lib.rs or src/main.rs if is_bin { file::write(`${src_dir}/main.rs`, `fn main() { println!("Hello from ${project_name}!"); } `); } else { file::write(`${src_dir}/lib.rs`, `//! ${crate_name} crate for ${project_name}. `); } } // Clean up the placeholder .gitkeep directory file::delete("crates/.gitkeep");