rust_bus 3.0.6

bus — Lightweight CQRS Library for Rust
Documentation
use crate::contracts::bus_event::IBusEvent;
use crate::dispatch::dispatch_in_memory::dispatch_in_memory;

#[cfg(all(not(feature = "context"), not(feature = "_db_any")))]
pub async fn event<TEvent>(
    event: TEvent,
    metadata: &crate::contracts::meta::BusMetadata,
) -> Result<(), Box<dyn std::error::Error + Send + Sync>>
where
    TEvent: IBusEvent,
{
    let _cnt = dispatch_in_memory(&event, metadata).await?;

    #[cfg(feature = "logging")]
    {
        if _cnt == 0 {
            log::warn!("No handlers found for event: {}", TEvent::EVENT_IDENTITY);
        } else {
            log::trace!(
                "Successfully dispatched handlers: {} to {} event",
                _cnt,
                TEvent::EVENT_IDENTITY,
            );
        }
    }
    Ok(())
}

#[cfg(all(not(feature = "context"), feature = "_db_any"))]
pub async fn event<'a, TEvent>(
    #[cfg(feature = "sqlx-postgres")] txn: &mut sqlx::Transaction<'a, sqlx::Postgres>,
    #[cfg(feature = "sqlx-mysql")] txn: &mut sqlx::Transaction<'a, sqlx::MySql>,
    #[cfg(feature = "_db_sea_orm")] txn: &'a sea_orm::DatabaseTransaction,
    event: TEvent,
    metadata: &crate::contracts::meta::BusMetadata,
) -> Result<(), Box<dyn std::error::Error + Send + Sync>>
where
    TEvent: IBusEvent,
{
    let mut _cnt = dispatch_in_memory(txn, &event, metadata).await?;
    _cnt += crate::dispatch::dispatch_db::dispatch_db(txn, &event, metadata).await?;

    #[cfg(feature = "logging")]
    {
        if _cnt == 0 {
            log::warn!("No handlers found for event: {}", TEvent::EVENT_IDENTITY);
        } else {
            log::trace!(
                "Successfully dispatched handlers: {} to {} event",
                _cnt,
                TEvent::EVENT_IDENTITY,
            );
        }
    }
    Ok(())
}

#[cfg(all(feature = "context", feature = "_db_sqlx"))]
pub async fn event<'a, TContext, TEvent>(
    ctx: &mut TContext,
    event: TEvent,
) -> Result<(), Box<dyn std::error::Error + Send + Sync>>
where
    TEvent: IBusEvent,
    TContext: crate::contracts::ctx::IBusContext<'a> + ?Sized,
{
    let mut _cnt = dispatch_in_memory(&mut *ctx, &event).await?;

    let metadata = ctx.metadata().clone();
    _cnt += crate::dispatch::dispatch_db::dispatch_db(ctx.txn(), &event, &metadata).await?;

    #[cfg(feature = "logging")]
    {
        if _cnt == 0 {
            log::warn!("No handlers found for event: {}", TEvent::EVENT_IDENTITY);
        } else {
            log::trace!(
                "Successfully dispatched handlers: {} to {} event",
                _cnt,
                TEvent::EVENT_IDENTITY,
            );
        }
    }
    Ok(())
}

#[cfg(all(feature = "context", feature = "_db_sea_orm"))]
pub async fn event<'a, TContext, TEvent>(
    ctx: TContext,
    event: TEvent,
) -> Result<(), Box<dyn std::error::Error + Send + Sync>>
where
    TEvent: IBusEvent,
    TContext: crate::contracts::ctx::ToRawContext + crate::contracts::ctx::IBusContext<'a>,
{
    let metadata = ctx.metadata().clone();
    let txn = ctx.txn();

    let mut _cnt = dispatch_in_memory(ctx, &event).await?;

    _cnt += crate::dispatch::dispatch_db::dispatch_db(txn, &event, &metadata).await?;

    #[cfg(feature = "logging")]
    {
        if _cnt == 0 {
            log::warn!("No handlers found for event: {}", TEvent::EVENT_IDENTITY);
        } else {
            log::trace!(
                "Successfully dispatched handlers: {} to {} event",
                _cnt,
                TEvent::EVENT_IDENTITY,
            );
        }
    }
    Ok(())
}

#[cfg(all(feature = "context", not(feature = "_db_any")))]
pub async fn event<TContext, TEvent>(
    ctx: TContext,
    event: TEvent,
) -> Result<(), Box<dyn std::error::Error + Send + Sync>>
where
    TEvent: IBusEvent,
    TContext: crate::contracts::ctx::ToRawContext,
{
    let _cnt = dispatch_in_memory(ctx, &event).await?;

    #[cfg(feature = "logging")]
    {
        if _cnt == 0 {
            log::warn!("No handlers found for event: {}", TEvent::EVENT_IDENTITY);
        } else {
            log::trace!(
                "Successfully dispatched handlers: {} to {} event",
                _cnt,
                TEvent::EVENT_IDENTITY,
            );
        }
    }
    Ok(())
}