@@ -11,171 +11,6 @@ use serde::{Deserialize, Serialize};
1111
1212use crate :: versioning:: Versioned ;
1313
14- /// Contains a type-state builder for [`PersistentEvent`] type.
15- ///
16- /// [`PersistentEvent`]: struct.PersistedEvent.html
17- pub mod persistent {
18- /// Creates a new [`PersistedEvent`] by wrapping an Event value.
19- ///
20- /// [`PersistentEvent`]: ../struct.PersistedEvent.html
21- pub struct EventBuilder < SourceId , T > {
22- pub ( super ) event : T ,
23- pub ( super ) source_id : SourceId ,
24- }
25-
26- impl < SourceId , T > From < ( SourceId , T ) > for EventBuilder < SourceId , T > {
27- #[ inline]
28- fn from ( value : ( SourceId , T ) ) -> Self {
29- let ( source_id, event) = value;
30- Self { source_id, event }
31- }
32- }
33-
34- impl < SourceId , T > EventBuilder < SourceId , T > {
35- /// Specifies the [`PersistentEvent`] version and moves to the next
36- /// builder state.
37- ///
38- /// [`PersistentEvent`]: ../struct.PersistedEvent.html
39- #[ inline]
40- pub fn version ( self , value : u32 ) -> EventBuilderWithVersion < SourceId , T > {
41- EventBuilderWithVersion {
42- version : value,
43- event : self . event ,
44- source_id : self . source_id ,
45- }
46- }
47-
48- /// Specifies the [`PersistentEvent`] sequence number and moves to the next
49- /// builder state.
50- ///
51- /// [`PersistentEvent`]: ../struct.PersistedEvent.html
52- #[ inline]
53- pub fn sequence_number ( self , value : u32 ) -> EventBuilderWithSequenceNumber < SourceId , T > {
54- EventBuilderWithSequenceNumber {
55- sequence_number : value,
56- event : self . event ,
57- source_id : self . source_id ,
58- }
59- }
60- }
61-
62- /// Next step in creating a new [`PersistedEvent`] carrying an Event value
63- /// and its version.
64- ///
65- /// [`PersistentEvent`]: ../struct.PersistedEvent.html
66- pub struct EventBuilderWithVersion < SourceId , T > {
67- version : u32 ,
68- event : T ,
69- source_id : SourceId ,
70- }
71-
72- impl < SourceId , T > EventBuilderWithVersion < SourceId , T > {
73- /// Specifies the [`PersistentEvent`] sequence number and moves to the next
74- /// builder state.
75- ///
76- /// [`PersistentEvent`]: ../struct.PersistedEvent.html
77- #[ inline]
78- pub fn sequence_number ( self , value : u32 ) -> super :: PersistedEvent < SourceId , T > {
79- super :: PersistedEvent {
80- version : self . version ,
81- event : self . event ,
82- source_id : self . source_id ,
83- sequence_number : value,
84- }
85- }
86- }
87-
88- /// Next step in creating a new [`PersistedEvent`] carrying an Event value
89- /// and its sequence number.
90- ///
91- /// [`PersistentEvent`]: ../struct.PersistedEvent.html
92- pub struct EventBuilderWithSequenceNumber < SourceId , T > {
93- sequence_number : u32 ,
94- event : T ,
95- source_id : SourceId ,
96- }
97-
98- impl < SourceId , T > EventBuilderWithSequenceNumber < SourceId , T > {
99- /// Specifies the [`PersistentEvent`] version and moves to the next
100- /// builder state.
101- ///
102- /// [`PersistentEvent`]: ../struct.PersistedEvent.html
103- #[ inline]
104- pub fn version ( self , value : u32 ) -> super :: PersistedEvent < SourceId , T > {
105- super :: PersistedEvent {
106- version : value,
107- event : self . event ,
108- source_id : self . source_id ,
109- sequence_number : self . sequence_number ,
110- }
111- }
112- }
113- }
114-
115- /// An [`Event`] wrapper for events that have been
116- /// successfully committed to the [`EventStore`].
117- ///
118- /// [`EventStream`]s are composed of these events.
119- ///
120- /// [`Event`]: trait.EventStore.html#associatedtype.Event
121- /// [`EventStream`]: type.EventStream.html
122- #[ derive( Debug , Clone , PartialEq , Eq ) ]
123- #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
124- pub struct PersistedEvent < SourceId , T > {
125- source_id : SourceId ,
126- version : u32 ,
127- sequence_number : u32 ,
128- #[ serde( flatten) ]
129- event : T ,
130- }
131-
132- impl < SourceId , T > Versioned for PersistedEvent < SourceId , T > {
133- #[ inline]
134- fn version ( & self ) -> u32 {
135- self . version
136- }
137- }
138-
139- impl < SourceId , T > Deref for PersistedEvent < SourceId , T > {
140- type Target = T ;
141-
142- fn deref ( & self ) -> & Self :: Target {
143- & self . event
144- }
145- }
146-
147- impl < SourceId , T > PersistedEvent < SourceId , T > {
148- /// Creates a new [`EventBuilder`] from the provided Event value.
149- ///
150- /// [`EventBuilder`]: persistent/struct.EventBuilder.html
151- #[ inline]
152- pub fn from ( source_id : SourceId , event : T ) -> persistent:: EventBuilder < SourceId , T > {
153- persistent:: EventBuilder { source_id, event }
154- }
155-
156- /// Returns the event sequence number.
157- #[ inline]
158- pub fn sequence_number ( & self ) -> u32 {
159- self . sequence_number
160- }
161-
162- /// Returns the [`SourceId`] of the persisted event.
163- ///
164- /// [`SourceId`]: trait.EventStore.html#associatedType.SourceId
165- #[ inline]
166- pub fn source_id ( & self ) -> & SourceId {
167- & self . source_id
168- }
169-
170- /// Unwraps the inner [`Event`] from the `PersistedEvent` wrapper.
171- ///
172- /// [`Event`]: trait.EventStore.html#associatedtype.Event
173- #[ inline]
174- pub fn take ( self ) -> T {
175- self . event
176- }
177- }
178-
17914/// Selection operation for the events to capture in an [`EventStream`].
18015///
18116/// [`EventStream`]: type.EventStream.html
@@ -223,7 +58,7 @@ pub enum Expected {
22358pub type EventStream < ' a , S > = BoxStream <
22459 ' a ,
22560 Result <
226- PersistedEvent < <S as EventStore >:: SourceId , <S as EventStore >:: Event > ,
61+ Persisted < <S as EventStore >:: SourceId , <S as EventStore >:: Event > ,
22762 <S as EventStore >:: Error ,
22863 > ,
22964> ;
@@ -338,3 +173,168 @@ pub trait EventStore {
338173 /// [`SourceId`]: trait.EventStore.html#associatedtype.SourceId
339174 fn remove ( & mut self , source_id : Self :: SourceId ) -> BoxFuture < Result < ( ) , Self :: Error > > ;
340175}
176+
177+ /// An [`Event`] wrapper for events that have been
178+ /// successfully committed to the [`EventStore`].
179+ ///
180+ /// [`EventStream`]s are composed of these events.
181+ ///
182+ /// [`Event`]: trait.EventStore.html#associatedtype.Event
183+ /// [`EventStream`]: type.EventStream.html
184+ #[ derive( Debug , Clone , PartialEq , Eq ) ]
185+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
186+ pub struct Persisted < SourceId , T > {
187+ source_id : SourceId ,
188+ version : u32 ,
189+ sequence_number : u32 ,
190+ #[ serde( flatten) ]
191+ event : T ,
192+ }
193+
194+ impl < SourceId , T > Versioned for Persisted < SourceId , T > {
195+ #[ inline]
196+ fn version ( & self ) -> u32 {
197+ self . version
198+ }
199+ }
200+
201+ impl < SourceId , T > Deref for Persisted < SourceId , T > {
202+ type Target = T ;
203+
204+ fn deref ( & self ) -> & Self :: Target {
205+ & self . event
206+ }
207+ }
208+
209+ impl < SourceId , T > Persisted < SourceId , T > {
210+ /// Creates a new [`EventBuilder`] from the provided Event value.
211+ ///
212+ /// [`EventBuilder`]: persistent/struct.EventBuilder.html
213+ #[ inline]
214+ pub fn from ( source_id : SourceId , event : T ) -> persistent:: EventBuilder < SourceId , T > {
215+ persistent:: EventBuilder { source_id, event }
216+ }
217+
218+ /// Returns the event sequence number.
219+ #[ inline]
220+ pub fn sequence_number ( & self ) -> u32 {
221+ self . sequence_number
222+ }
223+
224+ /// Returns the [`SourceId`] of the persisted event.
225+ ///
226+ /// [`SourceId`]: trait.EventStore.html#associatedType.SourceId
227+ #[ inline]
228+ pub fn source_id ( & self ) -> & SourceId {
229+ & self . source_id
230+ }
231+
232+ /// Unwraps the inner [`Event`] from the `Persisted` wrapper.
233+ ///
234+ /// [`Event`]: trait.EventStore.html#associatedtype.Event
235+ #[ inline]
236+ pub fn take ( self ) -> T {
237+ self . event
238+ }
239+ }
240+
241+ /// Contains a type-state builder for [`PersistentEvent`] type.
242+ ///
243+ /// [`PersistentEvent`]: struct.Persisted.html
244+ pub mod persistent {
245+ /// Creates a new [`Persisted`] by wrapping an Event value.
246+ ///
247+ /// [`PersistentEvent`]: ../struct.Persisted.html
248+ pub struct EventBuilder < SourceId , T > {
249+ pub ( super ) event : T ,
250+ pub ( super ) source_id : SourceId ,
251+ }
252+
253+ impl < SourceId , T > From < ( SourceId , T ) > for EventBuilder < SourceId , T > {
254+ #[ inline]
255+ fn from ( value : ( SourceId , T ) ) -> Self {
256+ let ( source_id, event) = value;
257+ Self { source_id, event }
258+ }
259+ }
260+
261+ impl < SourceId , T > EventBuilder < SourceId , T > {
262+ /// Specifies the [`PersistentEvent`] version and moves to the next
263+ /// builder state.
264+ ///
265+ /// [`PersistentEvent`]: ../struct.Persisted.html
266+ #[ inline]
267+ pub fn version ( self , value : u32 ) -> EventBuilderWithVersion < SourceId , T > {
268+ EventBuilderWithVersion {
269+ version : value,
270+ event : self . event ,
271+ source_id : self . source_id ,
272+ }
273+ }
274+
275+ /// Specifies the [`PersistentEvent`] sequence number and moves to the next
276+ /// builder state.
277+ ///
278+ /// [`PersistentEvent`]: ../struct.Persisted.html
279+ #[ inline]
280+ pub fn sequence_number ( self , value : u32 ) -> EventBuilderWithSequenceNumber < SourceId , T > {
281+ EventBuilderWithSequenceNumber {
282+ sequence_number : value,
283+ event : self . event ,
284+ source_id : self . source_id ,
285+ }
286+ }
287+ }
288+
289+ /// Next step in creating a new [`Persisted`] carrying an Event value
290+ /// and its version.
291+ ///
292+ /// [`PersistentEvent`]: ../struct.Persisted.html
293+ pub struct EventBuilderWithVersion < SourceId , T > {
294+ version : u32 ,
295+ event : T ,
296+ source_id : SourceId ,
297+ }
298+
299+ impl < SourceId , T > EventBuilderWithVersion < SourceId , T > {
300+ /// Specifies the [`PersistentEvent`] sequence number and moves to the next
301+ /// builder state.
302+ ///
303+ /// [`PersistentEvent`]: ../struct.Persisted.html
304+ #[ inline]
305+ pub fn sequence_number ( self , value : u32 ) -> super :: Persisted < SourceId , T > {
306+ super :: Persisted {
307+ version : self . version ,
308+ event : self . event ,
309+ source_id : self . source_id ,
310+ sequence_number : value,
311+ }
312+ }
313+ }
314+
315+ /// Next step in creating a new [`Persisted`] carrying an Event value
316+ /// and its sequence number.
317+ ///
318+ /// [`PersistentEvent`]: ../struct.Persisted.html
319+ pub struct EventBuilderWithSequenceNumber < SourceId , T > {
320+ sequence_number : u32 ,
321+ event : T ,
322+ source_id : SourceId ,
323+ }
324+
325+ impl < SourceId , T > EventBuilderWithSequenceNumber < SourceId , T > {
326+ /// Specifies the [`PersistentEvent`] version and moves to the next
327+ /// builder state.
328+ ///
329+ /// [`PersistentEvent`]: ../struct.Persisted.html
330+ #[ inline]
331+ pub fn version ( self , value : u32 ) -> super :: Persisted < SourceId , T > {
332+ super :: Persisted {
333+ version : value,
334+ event : self . event ,
335+ source_id : self . source_id ,
336+ sequence_number : self . sequence_number ,
337+ }
338+ }
339+ }
340+ }
0 commit comments