Skip to main content

DomainEvent

Trait DomainEvent 

Source
pub trait DomainEvent:
    Clone
    + Send
    + Sync
    + 'static {
    // Required methods
    fn event_type(&self) -> &'static str;
    fn aggregate_id(&self) -> &str;

    // Provided methods
    fn occurred_at(&self) -> DateTime<Utc> { ... }
    fn aggregate_type(&self) -> &'static str { ... }
    fn version(&self) -> u32 { ... }
}
Expand description

Trait for domain events

All domain events must implement this trait to be used with the EventBus. Domain events represent something that happened in the domain that domain experts care about.

§Example

ⓘ
use backbone_messaging::DomainEvent;
use chrono::{DateTime, Utc};

#[derive(Clone, Debug)]
struct OrderPlaced {
    order_id: String,
    customer_id: String,
    total: f64,
    placed_at: DateTime<Utc>,
}

impl DomainEvent for OrderPlaced {
    fn event_type(&self) -> &'static str {
        "OrderPlaced"
    }

    fn aggregate_id(&self) -> &str {
        &self.order_id
    }

    fn occurred_at(&self) -> DateTime<Utc> {
        self.placed_at
    }
}

Required Methods§

Source

fn event_type(&self) -> &'static str

Returns the event type name (e.g., “UserCreated”, “OrderPlaced”)

Source

fn aggregate_id(&self) -> &str

Returns the aggregate ID this event belongs to

Provided Methods§

Source

fn occurred_at(&self) -> DateTime<Utc>

Returns when the event occurred Default implementation returns current time

Source

fn aggregate_type(&self) -> &'static str

Returns the aggregate type name (e.g., “User”, “Order”) Default implementation extracts from event type

Source

fn version(&self) -> u32

Returns the event version for schema evolution

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl<E: Clone + Send + Sync + 'static> DomainEvent for CrudEvent<E>