create_rspc_app/
generator.rs1use std::{io, path::Path};
2
3use walkdir::WalkDir;
4
5use crate::{
6 database::Database, framework::Framework, frontend_framework::FrontendFramework,
7 utils::replace_in_file,
8};
9
10pub fn code_generator(
11 framework: Framework,
12 database: Database,
13 frontend_framework: FrontendFramework,
14 path: &Path,
15 project_name: &str,
16) -> io::Result<()> {
17 if database == Database::None {
18 framework.render(path, project_name)?;
19 } else {
20 database.render(path, project_name, framework.clone())?;
21 }
22
23 frontend_framework.render(path, project_name, framework)?;
24
25 for entry in WalkDir::new(path) {
26 let entry = entry.unwrap();
27 if entry.file_name().to_str() == Some("Cargo__toml") {
28 replace_in_file(entry.path(), "__cra_version__", env!("CARGO_PKG_VERSION"))?;
29 std::fs::rename(entry.path(), entry.path().with_file_name("Cargo.toml"))?;
30 }
31 }
32
33 println!("Generated project at '{}'", path.display());
34
35 Ok(())
36}