use anyhow::Result;
use async_trait::async_trait;
use sqlx::PgPool;
mod mail_activity_seeder;
mod mail_activity_type_seeder;
mod mail_activity_plan_seeder;
mod mail_activity_plan_template_seeder;
mod mail_alias_domain_seeder;
mod mail_alias_seeder;
mod mail_attachment_seeder;
mod mail_message_attachment_seeder;
mod mail_message_star_seeder;
mod mail_message_seeder;
mod mail_seeder;
mod mail_notification_seeder;
mod mail_message_subtype_seeder;
mod mail_message_reaction_seeder;
mod mail_followers_seeder;
mod mail_presence_seeder;
mod mail_blacklist_seeder;
mod mail_tracking_value_seeder;
mod discuss_channel_seeder;
mod discuss_channel_member_seeder;
mod mail_guest_seeder;
mod mail_server_seeder;
mod fetchmail_server_seeder;
mod mail_gateway_allowed_seeder;
mod phone_blacklist_seeder;
mod mail_message_schedule_seeder;
mod mail_scheduled_message_seeder;
mod sms_seeder;
mod sms_template_seeder;
mod sms_tracker_seeder;
pub use mail_activity_seeder::SeedMailActivitySeeder;
pub use mail_activity_type_seeder::SeedMailActivityTypeSeeder;
pub use mail_activity_plan_seeder::SeedMailActivityPlanSeeder;
pub use mail_activity_plan_template_seeder::SeedMailActivityPlanTemplateSeeder;
pub use mail_alias_domain_seeder::SeedMailAliasDomainSeeder;
pub use mail_alias_seeder::SeedMailAliasSeeder;
pub use mail_attachment_seeder::SeedMailAttachmentSeeder;
pub use mail_message_attachment_seeder::SeedMailMessageAttachmentSeeder;
pub use mail_message_star_seeder::SeedMailMessageStarSeeder;
pub use mail_message_seeder::SeedMailMessageSeeder;
pub use mail_seeder::SeedMailSeeder;
pub use mail_notification_seeder::SeedMailNotificationSeeder;
pub use mail_message_subtype_seeder::SeedMailMessageSubtypeSeeder;
pub use mail_message_reaction_seeder::SeedMailMessageReactionSeeder;
pub use mail_followers_seeder::SeedMailFollowersSeeder;
pub use mail_presence_seeder::SeedMailPresenceSeeder;
pub use mail_blacklist_seeder::SeedMailBlacklistSeeder;
pub use mail_tracking_value_seeder::SeedMailTrackingValueSeeder;
pub use discuss_channel_seeder::SeedDiscussChannelSeeder;
pub use discuss_channel_member_seeder::SeedDiscussChannelMemberSeeder;
pub use mail_guest_seeder::SeedMailGuestSeeder;
pub use mail_server_seeder::SeedMailServerSeeder;
pub use fetchmail_server_seeder::SeedFetchmailServerSeeder;
pub use mail_gateway_allowed_seeder::SeedMailGatewayAllowedSeeder;
pub use phone_blacklist_seeder::SeedPhoneBlacklistSeeder;
pub use mail_message_schedule_seeder::SeedMailMessageScheduleSeeder;
pub use mail_scheduled_message_seeder::SeedMailScheduledMessageSeeder;
pub use sms_seeder::SeedSmsSeeder;
pub use sms_template_seeder::SeedSmsTemplateSeeder;
pub use sms_tracker_seeder::SeedSmsTrackerSeeder;
#[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,
}