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
impl OutboxMessageId
Sourcepub fn new(value: impl Into<String>) -> OutboxMessageId
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 }Sourcepub fn as_str(&self) -> &str
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}Sourcepub fn into_inner(self) -> String
pub fn into_inner(self) -> String
English:
Consumes the identifier and returns its owned string.
日本語:
識別子を消費し、所有された文字列を返します。
Trait Implementations§
Source§impl Clone for OutboxMessageId
impl Clone for OutboxMessageId
Source§fn clone(&self) -> OutboxMessageId
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)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for OutboxMessageId
impl Debug for OutboxMessageId
impl Eq for OutboxMessageId
Source§impl Hash for OutboxMessageId
impl Hash for OutboxMessageId
Source§impl PartialEq for OutboxMessageId
impl PartialEq for OutboxMessageId
impl StructuralPartialEq for OutboxMessageId
Auto Trait Implementations§
impl Freeze for OutboxMessageId
impl RefUnwindSafe for OutboxMessageId
impl Send for OutboxMessageId
impl Sync for OutboxMessageId
impl Unpin for OutboxMessageId
impl UnsafeUnpin for OutboxMessageId
impl UnwindSafe for OutboxMessageId
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more