create_rspc_app/
framework.rs1use std::{io, path::Path};
2
3use crate::utils::replace_in_file;
4use include_dir::{include_dir, Dir};
5use strum::{Display, EnumIter, EnumString};
6
7static AXUM_BASE_TEMPLATE: Dir<'_> = include_dir!("$CARGO_MANIFEST_DIR/templates/axum_base");
8static TAURI_BASE_TEMPLATE: Dir<'_> = include_dir!("$CARGO_MANIFEST_DIR/templates/tauri_base");
9
10#[derive(Debug, Clone, Display, EnumIter, EnumString, PartialEq, Eq)]
11pub enum Framework {
12 Axum,
13 Tauri,
14}
15
16impl Framework {
17 pub fn render(&self, path: &Path, project_name: &str) -> io::Result<()> {
18 match self {
19 Self::Axum => {
20 std::fs::create_dir_all(path)?;
21 AXUM_BASE_TEMPLATE.extract(path)?;
22 replace_in_file(path.join("Cargo__toml").as_path(), "__name__", project_name)?;
23 replace_in_file(
24 path.join("Cargo__toml").as_path(),
25 "__cra_version__",
26 env!("CARGO_PKG_VERSION"),
27 )?;
28 }
29 Self::Tauri => {
30 std::fs::create_dir_all(path)?;
31 TAURI_BASE_TEMPLATE.extract(path)?;
32 let path = path.join("src-tauri");
33 replace_in_file(path.join("Cargo__toml").as_path(), "__name__", project_name)?;
34 replace_in_file(
35 path.join("Cargo__toml").as_path(),
36 "__cra_version__",
37 env!("CARGO_PKG_VERSION"),
38 )?;
39 }
40 }
41
42 Ok(())
43 }
44}