support_kit/boilerplate/
boilerplate_preset.rs

1use clap::Subcommand;
2use strum::VariantArray;
3
4use super::{BoilerplateControl, BoilerplateTemplate};
5
6#[derive(Clone, Debug, Subcommand, PartialEq, VariantArray)]
7#[clap(rename_all = "kebab-case")]
8pub enum BoilerplatePreset {
9    Dockerfile,
10    BuildAction,
11    TestAction,
12    CargoConfig,
13    CrateConfig,
14}
15
16impl BoilerplatePreset {
17    pub fn all() -> Vec<Self> {
18        Self::VARIANTS.to_vec()
19    }
20
21    pub fn init(&self, controller: &BoilerplateControl) -> BoilerplateTemplate {
22        match self {
23            Self::Dockerfile => BoilerplateTemplate::builder()
24                .path(controller.base_path.join("infrastructure/containers"))
25                .file_name("Dockerfile")
26                .source(include_str!(
27                    "templates/infrastructure-containers-dockerfile"
28                ))
29                .build(),
30            Self::BuildAction => BoilerplateTemplate::builder()
31                .path(controller.base_path.join(".github/workflows"))
32                .file_name("build.yaml")
33                .source(include_str!("templates/github-workflow-build.yaml"))
34                .build(),
35            Self::TestAction => BoilerplateTemplate::builder()
36                .path(controller.base_path.join(".github/workflows"))
37                .file_name("test.yaml")
38                .source(include_str!("templates/github-workflow-test.yaml"))
39                .build(),
40            Self::CargoConfig => BoilerplateTemplate::builder()
41                .path(controller.base_path.join(".cargo"))
42                .file_name("config.toml")
43                .source(include_str!("templates/cargo-config.toml"))
44                .build(),
45            Self::CrateConfig => BoilerplateTemplate::builder()
46                .path(&controller.base_path)
47                .file_name(format!("{name}.json", name = controller.config.name()))
48                .source(
49                    serde_json::to_string(&controller.config)
50                        .expect("Failed to serialize configuration"),
51                )
52                .build(),
53        }
54    }
55}