create_rspc_app/
generator.rs

1use 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}