78 lines
1.7 KiB
Plaintext
78 lines
1.7 KiB
Plaintext
// 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");
|