Skip to main content

AggregatorBuilder

Struct AggregatorBuilder 

Source
pub struct AggregatorBuilder { /* private fields */ }
Expand description

Builder for creating and committing events.

Use create() or aggregator() to create an instance, then chain method calls to add events and metadata before committing.

§Optimistic Concurrency

If original_version is 0 (default for new aggregates), the builder queries the current version before writing. Otherwise, it uses the provided version for optimistic concurrency control.

§Example

// New aggregate
let id = create()
    .event(&MyEvent { ... })
    .commit(&executor)
    .await?;

// Existing aggregate with version check
aggregator(&id)
    .original_version(5)
    .event(&AnotherEvent { ... })
    .commit(&executor)
    .await?;

Implementations§

Source§

impl AggregatorBuilder

Source

pub fn new(aggregator_id: impl Into<String>) -> AggregatorBuilder

Creates a new builder for the given aggregate ID.

Source

pub fn ids(ids: Vec<impl Into<String>>) -> AggregatorBuilder

Creates a new builder for the given aggregate IDs.

Source

pub fn original_version(&mut self, v: u16) -> &mut Self

Sets the expected version for optimistic concurrency control.

If the aggregate’s current version doesn’t match, the commit will fail with WriteError::InvalidOriginalVersion.

Source

pub fn routing_key(&mut self, v: impl Into<String>) -> &mut Self

Sets the routing key for event distribution.

The routing key is used for partitioning events across consumers. Once set, subsequent calls are ignored (locked behavior).

Source

pub fn routing_key_opt(&mut self, v: Option<String>) -> &mut Self

Sets an optional routing key for event distribution.

Pass None to explicitly clear the routing key. Once set, subsequent calls are ignored (locked behavior).

Source

pub fn metadata<M>(&mut self, key: impl Into<String>, value: &M) -> &mut Self
where M: Encode,

Sets the metadata to attach to all events.

Metadata is serialized using bitcode and stored alongside each event.

Source

pub fn requested_by(&mut self, value: impl Into<String>) -> &mut Self

Source

pub fn requested_as(&mut self, value: impl Into<String>) -> &mut Self

Source

pub fn metadata_from(&mut self, value: impl Into<Metadata>) -> &mut Self

Sets the metadata to attach to all events.

Metadata is serialized using bitcode and stored alongside each event.

Source

pub fn event<D>(&mut self, v: &D) -> &mut Self

Adds an event to be committed.

Multiple events can be added and will be committed atomically. The event data is serialized using bitcode.

Source

pub async fn commit<E: Executor>( &self, executor: &E, ) -> Result<String, WriteError>

Commits all added events to the executor.

Returns the aggregate ID on success.

§Errors

Trait Implementations§

Source§

impl Clone for AggregatorBuilder

Source§

fn clone(&self) -> AggregatorBuilder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more