Skip to main content

doido_generators/generators/
controller.rs

1use crate::generator::{GeneratedFile, Generator};
2use crate::generators::{to_pascal, to_snake};
3use doido_core::Result;
4
5pub struct ControllerGenerator;
6
7impl Generator for ControllerGenerator {
8    fn name(&self) -> &str {
9        "controller"
10    }
11
12    fn generate(&self, args: &[&str]) -> Result<Vec<GeneratedFile>> {
13        let name = args.first().copied().ok_or_else(|| {
14            doido_core::anyhow::anyhow!("controller generator requires a name argument")
15        })?;
16        let snake = to_snake(name);
17        let pascal = to_pascal(name);
18        let content = crate::templates::get("controller/controller.rs.template")
19            .replace("{pascal}", &pascal)
20            .replace("{snake}", &snake);
21        let test = crate::templates::get("controller/controller_test.rs.template")
22            .replace("{pascal}", &pascal)
23            .replace("{snake}", &snake);
24        Ok(vec![
25            GeneratedFile {
26                path: format!("src/controllers/{snake}_controller.rs"),
27                content,
28            },
29            GeneratedFile {
30                path: format!("tests/{snake}_controller_test.rs"),
31                content: test,
32            },
33        ])
34    }
35}