doido_generators/generators/
mailer.rs1use crate::generator::{GeneratedFile, Generator};
2use crate::generators::{to_pascal, to_snake};
3use doido_core::Result;
4
5pub struct MailerGenerator;
6
7impl Generator for MailerGenerator {
8 fn name(&self) -> &str {
9 "mailer"
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!("mailer generator requires a name argument")
15 })?;
16 let snake = to_snake(name);
17 let pascal = to_pascal(name);
18 let content =
19 crate::templates::get("mailer/mailer.rs.template").replace("{pascal}", &pascal);
20 let test = crate::templates::get("mailer/mailer_test.rs.template")
21 .replace("{pascal}", &pascal)
22 .replace("{snake}", &snake);
23 Ok(vec![
24 GeneratedFile {
25 path: format!("app/mailers/{snake}_mailer.rs"),
26 content,
27 },
28 GeneratedFile {
29 path: format!("tests/{snake}_mailer_test.rs"),
30 content: test,
31 },
32 ])
33 }
34}