Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "mneme"
version = "0.4.2"
version = "0.5.0"
authors = ["John Wilger <john@johnwilger.com>"]
edition = "2024"
description = "An event-sourcing library for Rust projects."
Expand Down
8 changes: 5 additions & 3 deletions src/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ pub trait Command: Clone {

fn get_state(&self) -> Self::State;

fn set_state(&mut self, state: Self::State);
fn set_state(&mut self, state: &Self::State);

fn mark_retry(&self) -> Self
where
Expand All @@ -36,9 +36,11 @@ pub trait Command: Clone {
}

pub trait AggregateState<E: Event>: Debug + Sized {
fn apply(&self, event: &E) -> Self;
fn apply(&mut self, event: &E) -> &Self;
}

impl<E: Event> AggregateState<E> for () {
fn apply(&self, _: &E) {}
fn apply(&mut self, _: &E) -> &Self {
self
}
}
27 changes: 13 additions & 14 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ mod tests {
type Error = Error;

fn get_state(&self) -> Self::State {}
fn set_state(&mut self, _: Self::State) {}
fn set_state(&mut self, _: &Self::State) {}
fn event_stream_id(&self) -> EventStreamId {
EventStreamId(self.id)
}
Expand Down Expand Up @@ -334,8 +334,8 @@ mod tests {
self.state.clone()
}

fn set_state(&mut self, state: Self::State) {
self.state = state;
fn set_state(&mut self, state: &Self::State) {
self.state = state.to_owned();
}

fn event_stream_id(&self) -> EventStreamId {
Expand Down Expand Up @@ -378,18 +378,17 @@ mod tests {
}

impl AggregateState<TestEvent> for StatefulCommandState {
fn apply(&self, event: &TestEvent) -> Self {
fn apply(&mut self, event: &TestEvent) -> &Self {
match event {
TestEvent::FooHappened { value, .. } => Self {
foo: Some(*value),
..*self
},
TestEvent::BarHappened { value, .. } => Self {
bar: Some(*value),
..*self
},
_ => Self { ..*self },
TestEvent::FooHappened { value, .. } => {
self.foo = Some(*value);
}
TestEvent::BarHappened { value, .. } => {
self.bar = Some(*value);
}
_ => (),
}
self
}
}
#[tokio::test]
Expand Down Expand Up @@ -476,7 +475,7 @@ mod tests {
EventStreamId(self.id)
}
fn get_state(&self) -> Self::State {}
fn set_state(&mut self, _: Self::State) {}
fn set_state(&mut self, _: &Self::State) {}
}

#[tokio::test]
Expand Down
29 changes: 14 additions & 15 deletions tests/test_cases.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ impl Command for NoopCommand {
EventStreamId(self.id)
}
fn get_state(&self) -> Self::State {}
fn set_state(&mut self, _: Self::State) {}
fn set_state(&mut self, _: &Self::State) {}
}

#[derive(Debug, thiserror::Error)]
Expand Down Expand Up @@ -63,7 +63,7 @@ impl Command for RejectCommand {
EventStreamId(self.id)
}
fn get_state(&self) -> Self::State {}
fn set_state(&mut self, _: Self::State) {}
fn set_state(&mut self, _: &Self::State) {}
}

#[derive(Clone)]
Expand Down Expand Up @@ -92,7 +92,7 @@ impl Command for EventProducingCommand {
EventStreamId(self.id)
}
fn get_state(&self) -> Self::State {}
fn set_state(&mut self, _: Self::State) {}
fn set_state(&mut self, _: &Self::State) {}
}

#[derive(Clone, Debug)]
Expand All @@ -102,18 +102,17 @@ pub struct StatefulCommandState {
}

impl AggregateState<TestEvent> for StatefulCommandState {
fn apply(&self, event: &TestEvent) -> Self {
fn apply(&mut self, event: &TestEvent) -> &Self {
match event {
TestEvent::FooHappened { value, .. } => Self {
foo: Some(*value),
..*self
},
TestEvent::BarHappened { value, .. } => Self {
bar: Some(*value),
..*self
},
_ => Self { ..*self },
TestEvent::FooHappened { value, .. } => {
self.foo = Some(*value);
}
TestEvent::BarHappened { value, .. } => {
self.bar = Some(*value);
}
_ => (),
}
self
}
}

Expand Down Expand Up @@ -144,8 +143,8 @@ impl Command for StatefulCommand {
self.state.clone()
}

fn set_state(&mut self, state: Self::State) {
self.state = state;
fn set_state(&mut self, state: &Self::State) {
self.state = state.to_owned();
}

fn event_stream_id(&self) -> EventStreamId {
Expand Down