support_kit/boilerplate/
boilerplate_preset.rs1use 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}