create_rspc_app/
framework.rs

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