doido_generators/generators/
migration.rs1use crate::generator::{GeneratedFile, Generator};
2use crate::generators::to_snake;
3use chrono::Utc;
4use doido_core::Result;
5
6pub struct MigrationGenerator;
7
8impl Generator for MigrationGenerator {
9 fn name(&self) -> &str {
10 "migration"
11 }
12
13 fn generate(&self, args: &[&str]) -> Result<Vec<GeneratedFile>> {
14 let name = args.first().copied().ok_or_else(|| {
15 doido_core::anyhow::anyhow!("migration generator requires a name argument")
16 })?;
17 let timestamp = Utc::now().format("%Y%m%d%H%M%S");
18 let snake = to_snake(name);
19 let test = crate::templates::get("migration/migration_test.rs.template")
20 .replace("{snake}", &snake);
21 Ok(vec![
22 GeneratedFile {
23 path: format!("db/migrations/{}_{}.rs", timestamp, snake),
24 content: crate::templates::get("migration/migration.rs.template"),
25 },
26 GeneratedFile {
27 path: format!("tests/{snake}_migration_test.rs"),
28 content: test,
29 },
30 ])
31 }
32}