pub use sea_orm::Iterable; pub use sea_orm_migration::prelude::*; use sea_orm_migration::sea_orm::{DbBackend, Statement}; mod m20220101_000001_create_table; mod m20230726_124452_images; mod m20230726_135630_parking_spaces; pub struct Migrator; #[async_trait::async_trait] impl MigratorTrait for Migrator { fn migrations() -> Vec> { vec![ Box::new(m20220101_000001_create_table::Migration), Box::new(m20230726_124452_images::Migration), Box::new(m20230726_135630_parking_spaces::Migration), ] } } pub async fn drop_enum<'m, Enum>(m: &SchemaManager<'m>) -> Result<(), DbErr> where Enum: Iterable + Iden + IntoIden, { let db_postgres = DbBackend::Postgres; let name = Enum::iter().next().unwrap().to_string(); let s = format!("DROP TYPE {name};"); let stmt = Statement::from_string(db_postgres, s); m.get_connection().execute(stmt).await?; Ok(()) } pub async fn create_enum<'m, Enum>(m: &SchemaManager<'m>) -> Result<(), DbErr> where Enum: Iterable + Iden + IntoIden, { let db_postgres = DbBackend::Postgres; let s = { let name = Enum::iter().next().unwrap().to_string(); let mut s = Enum::iter().skip(1).enumerate().fold( format!("CREATE TYPE {name} AS ENUM ("), |mut s, (idx, variant)| { if idx != 0 { s.push(','); } format!("{s} '{}'", variant.into_iden().quoted('\'')) }, ); s.push_str(" );"); eprintln!("{s:?}"); s }; let stmt = Statement::from_string(db_postgres, s); m.get_connection().execute(stmt).await?; Ok(()) }