Skip to main content

doido_generators/generators/
job.rs

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