rust_bus 3.0.6

bus — Lightweight CQRS Library for Rust
Documentation
use crate::contracts::bus_event::IBusEvent;
use crate::contracts::database_unique::Unique;
use crate::contracts::enums::ScheduleIn;

pub trait IEventHandlerDatabase<TEvent>: Default + Send + Sync + 'static
where
    TEvent: IBusEvent,
{
    const QUEUE: &'static str;
    const PRIORITY: u32 = 0;
    const MAX_ATTEMPTS: Option<u32> = None;
    const EXECUTION_TIMEOUT: Option<chrono::Duration> = None;
    const SCHEDULE_IN: ScheduleIn = ScheduleIn::Immediately;
    const TAGS: &'static [&'static str] = &[];
    const UNIQUE: Option<Unique> = None;

    fn next_attempt_at(current_attempt: u32) -> chrono::Duration {
        let attempt = current_attempt.max(1);
        let multiplier = 2_i64.saturating_pow(attempt - 1);
        let minutes = multiplier.min(60);
        chrono::Duration::try_minutes(minutes).unwrap_or_else(|| chrono::Duration::minutes(60))
    }

    #[cfg(feature = "_db_sea_orm")]
    fn handle(
        &self,
        db: &sea_orm::DatabaseConnection,
        event: &TEvent,
        metadata: &crate::contracts::meta::BusMetadata,
    ) -> impl Future<Output = Result<(), Box<dyn std::error::Error + Send + Sync>>> + Send;

    #[cfg(feature = "sqlx-postgres")]
    fn handle(
        &self,
        db: &sqlx::PgPool,
        event: &TEvent,
        metadata: &crate::contracts::meta::BusMetadata,
    ) -> impl Future<Output = Result<(), Box<dyn std::error::Error + Send + Sync>>> + Send;

    #[cfg(feature = "sqlx-mysql")]
    fn handle(
        &self,
        db: &sqlx::MySqlPool,
        event: &TEvent,
        metadata: &crate::contracts::meta::BusMetadata,
    ) -> impl Future<Output = Result<(), Box<dyn std::error::Error + Send + Sync>>> + Send;
}