Skip to content

Commit 87b767e

Browse files
authored
feat: rename to store::Persisted and proper error handling for Id in eventually-postgres (#90)
* feat: rename store::PersistedEvent into Persisted * feat(postgres): add proper error handling on events decoding * chore: address clippy warnings
1 parent a8b031e commit 87b767e

4 files changed

Lines changed: 258 additions & 264 deletions

File tree

eventually-core/src/store.rs

Lines changed: 166 additions & 166 deletions
Original file line numberDiff line numberDiff line change
@@ -11,171 +11,6 @@ use serde::{Deserialize, Serialize};
1111

1212
use 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 {
22358
pub 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

Comments
 (0)