Skip to main content

subscription_all

Attribute Macro subscription_all 

Source
#[subscription_all]
Expand description

Creates a subscription handler that processes all events of an aggregate type.

This macro is similar to [subscription] but handles all events from an aggregate without requiring the event data to be deserialized. The event is wrapped in RawEvent which provides access to event metadata (name, id, timestamp, etc.) without deserializing the payload.

§Function Signature

The function must have this signature:

async fn handler_name<E: Executor>(
    context: &Context<'_, E>,
    event: RawEvent<AggregateType>,
) -> anyhow::Result<()>

§Generated Code

For a function on_any_account_event, the macro generates:

  • OnAnyAccountEventHandler struct
  • on_any_account_event() constructor function
  • subscription::Handler<E> trait implementation with event_name() returning "all"

§Example

use evento::{Executor, metadata::RawEvent, subscription::Context};

#[evento::subscription_all]
async fn on_any_account_event<E: Executor>(
    context: &Context<'_, E>,
    event: RawEvent<BankAccount>,
) -> anyhow::Result<()> {
    // Access event metadata without deserializing
    println!("Event: {} on {}", event.name, event.aggregator_id);
    println!("Version: {}", event.version);
    println!("Timestamp: {}", event.timestamp);

    // Useful for logging, auditing, or forwarding events
    Ok(())
}

// Register with subscription - handles all BankAccount events
let subscription = SubscriptionBuilder::<Sqlite>::new("account-auditor")
    .handler(on_any_account_event())
    .start(&executor)
    .await?;