Skip to main content

OutboxMessageId

Struct OutboxMessageId 

Source
pub struct OutboxMessageId(/* private fields */);
Expand description

English:
Owned adapter-assigned identifier for an outbox message.

The string is not validated or generated here. It need not equal a domain event’s delivery identifier; uniqueness and identifier scope belong to the outbox adapter.

日本語:
アダプターが割り当てる、所有されたアウトボックスメッセージ識別子です。

ここでは文字列を検証・生成しません。ドメインイベントの配信識別子と同じである 必要はなく、一意性と識別子のスコープはアウトボックスアダプターが定めます。

Implementations§

Source§

impl OutboxMessageId

Source

pub fn new(value: impl Into<String>) -> OutboxMessageId

English:
Converts value to the stored string, accepting empty strings as well.

日本語:
value を保存用の文字列へ変換します。空文字列も受け付けます。

Examples found in repository?
examples/reliable_delivery.rs (line 115)
65    fn save_and_enqueue<'a>(
66        &'a mut self,
67        account: &'a Account,
68        expected: ExpectedRevision,
69        events: Vec<Credited>,
70    ) -> Pin<Box<dyn Future<Output = Result<AppendResult, AppendError<Self::Error>>> + Send + 'a>>
71    {
72        Box::pin(async move {
73            if events.is_empty() {
74                return Err(AppendError::EmptyBatch);
75            }
76            if self
77                .saved
78                .as_ref()
79                .is_some_and(|saved| saved.id != account.id)
80            {
81                return Err(AppendError::Adapter("demo stores only one account"));
82            }
83            let matches = match (expected, self.revision) {
84                (ExpectedRevision::NoStream(_), None) => true,
85                (ExpectedRevision::Revision(want), Some(have)) => want == have,
86                _ => false,
87            };
88            if !matches {
89                return Err(AppendError::Conflict(RevisionConflict {
90                    expected,
91                    current: self.revision.map_or(
92                        CurrentRevision::NoStream(NoStream),
93                        CurrentRevision::Revision,
94                    ),
95                }));
96            }
97            let first = match self.revision {
98                None => 0,
99                Some(current) => current
100                    .value()
101                    .checked_add(1)
102                    .ok_or(AppendError::RevisionExhausted { current })?,
103            };
104            let last = first.checked_add(events.len() as u64 - 1).ok_or(
105                AppendError::RevisionExhausted {
106                    current: StreamRevision::new(first),
107                },
108            )?;
109            let mut snapshot = account.clone();
110            snapshot.pull_events();
111            self.saved = Some(snapshot);
112            self.revision = Some(StreamRevision::new(last));
113            for (offset, event) in events.into_iter().enumerate() {
114                self.queue.push_back((
115                    OutboxMessageId::new(format!("{}:{}", account.id, first + offset as u64)),
116                    event,
117                ));
118            }
119            Ok(AppendResult {
120                resulting_revision: StreamRevision::new(last),
121            })
122        })
123    }
Source

pub fn as_str(&self) -> &str

English:
Borrows the message identifier without cloning its string.

日本語:
文字列を複製せずにメッセージ識別子を借用します。

Examples found in repository?
examples/reliable_delivery.rs (line 226)
215async fn deliver(
216    outbox: &mut Outbox,
217    broker: &mut Broker,
218    model: &mut ReadModel,
219    checkpoints: &mut Checkpoints,
220) -> Result<ProjectionApplication, &'static str> {
221    let claim = outbox.claim().await?.ok_or("queue empty")?;
222    let (id, event) = claim.into_parts();
223    broker.publish(&event).await?;
224    // This demo directly feeds a consumer after publishing; no real broker is used.
225    // Message IDs are stable across retries; these cursors are not sortable offsets.
226    let checkpoint = ProjectionCheckpoint::new(id.as_str().to_owned());
227    let result = model.apply_once(&event, &checkpoint).await?;
228    checkpoints.save(checkpoint).await?;
229    outbox.acknowledge(&id).await?;
230    Ok(result)
231}
Source

pub fn into_inner(self) -> String

English:
Consumes the identifier and returns its owned string.

日本語:
識別子を消費し、所有された文字列を返します。

Trait Implementations§

Source§

impl Clone for OutboxMessageId

Source§

fn clone(&self) -> OutboxMessageId

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for OutboxMessageId

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Eq for OutboxMessageId

Source§

impl Hash for OutboxMessageId

Source§

fn hash<__H>(&self, state: &mut __H)
where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for OutboxMessageId

Source§

fn eq(&self, other: &OutboxMessageId) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for OutboxMessageId

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, 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> 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 = !

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

fn try_from(value: U) -> Result<T, !>

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.