use anyhow::Result;
use async_trait::async_trait;
use sqlx::PgPool;
mod mailing_ab_test_seeder;
mod mailing_audience_seeder;
mod mailing_contact_seeder;
mod mailing_subscription_seeder;
mod opt_out_reason_seeder;
mod mailing_seeder;
mod mailing_trace_seeder;
mod mailing_filter_seeder;
pub use mailing_ab_test_seeder::SeedMailingAbTestSeeder;
pub use mailing_audience_seeder::SeedMailingAudienceSeeder;
pub use mailing_contact_seeder::SeedMailingContactSeeder;
pub use mailing_subscription_seeder::SeedMailingSubscriptionSeeder;
pub use opt_out_reason_seeder::SeedOptOutReasonSeeder;
pub use mailing_seeder::SeedMailingSeeder;
pub use mailing_trace_seeder::SeedMailingTraceSeeder;
pub use mailing_filter_seeder::SeedMailingFilterSeeder;
#[async_trait]
pub trait Seeder {
fn name(&self) -> &'static str;
fn order(&self) -> i32;
async fn should_run(&self, pool: &PgPool) -> Result<bool>;
async fn run(&self, pool: &PgPool) -> Result<()>;
async fn rollback(&self, _pool: &PgPool) -> Result<()> {
Ok(())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SeederType {
Reference,
Production,
Development,
Test,
}