1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
use crate::;
/// **English:**<br>
/// 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.
///
/// **日本語:**<br>
/// アダプターが割り当てる、所有されたアウトボックスメッセージ識別子です。
///
/// ここでは文字列を検証・生成しません。ドメインイベントの配信識別子と同じである
/// 必要はなく、一意性と識別子のスコープはアウトボックスアダプターが定めます。
;
/// **English:**<br>
/// Owned message identifier and event returned by an outbox claim.
///
/// Constructing or dropping this container does not reserve, acknowledge, or release a message.
/// Leases, redelivery, and acknowledgement effects are adapter responsibilities.
///
/// Split a claim to transfer its identifier and payload independently.
///
/// **日本語:**<br>
/// アウトボックスの取得操作が返す、所有されたメッセージ識別子とイベントです。
///
/// このコンテナーの構築や破棄は、メッセージの予約、確認応答、解放を行いません。
/// リース、再配信、確認応答の効果はアダプターの責務です。
///
/// 識別子とペイロードを別々に渡すために取得結果を分解します。
///
/// # Example / 使用例
///
/// ```rust
/// use ddd_toolkit_core::{OutboxClaim, OutboxMessageId};
///
/// let claim = OutboxClaim::new(OutboxMessageId::new("message-1"), 42_u32);
/// assert_eq!(claim.message_id().as_str(), "message-1");
/// assert_eq!(*claim.event(), 42);
/// let (id, event) = claim.into_parts();
/// assert_eq!(id.into_inner(), "message-1");
/// assert_eq!(event, 42);
/// ```
/// **English:**<br>
/// Persistence boundary for saving an aggregate and staging events for delivery.
///
/// An adapter supplies the transaction joining aggregate persistence and outbox insertion;
/// this trait contains no transaction implementation. Adapters must describe atomicity,
/// durability, concurrent claims, claim order, retry/lease policy, and panic conditions.
/// Claiming and acknowledging are separate from saving; no exactly-once delivery mechanism
/// is supplied, so consumers may need to handle duplicate events.
///
/// **日本語:**<br>
/// 集約の保存と配信対象イベントの登録を行う永続化境界です。
///
/// 集約の永続化とアウトボックス挿入を結ぶトランザクションはアダプターが提供し、
/// このトレイト自体には実装しません。原子性、永続性、並行取得、取得順序、再試行・
/// リース方針、パニック条件はアダプターが記述する必要があります。取得と確認応答は
/// 保存から分離されています。厳密に一度だけ配信する機構は提供しないため、
/// コンシューマー側で重複イベントへの対応が必要になる場合があります。