Skip to content

Commit a5fd077

Browse files
authored
Use references to mutable state in commands (#37)
This pull request includes several changes to the `mneme` Rust project, focusing on updating method signatures and improving state handling. The most important changes include modifying the `set_state` method to take a reference and updating the `apply` method to return a reference to `self`. Version update: * [`Cargo.toml`](diffhunk://#diff-2e9d962a08321605940b5a657135052fbcef87b5e360662bb527c96d9a615542L3-R3): Updated the version of the `mneme` package from `0.4.2` to `0.5.0`. Method signature updates: * [`src/command.rs`](diffhunk://#diff-de6b9cfd1a256da7900d35e26aa7279bd713110e68e91b52616befb7397848dfL17-R17): Changed the `set_state` method in the `Command` trait to take a reference to `Self::State`. * [`src/lib.rs`](diffhunk://#diff-b1a35a68f14e696205874893c07fd24fdb88882b47c23cc0e0c80a30c7d53759L177-R177): Updated the `set_state` methods in test implementations to take a reference to `Self::State`. [[1]](diffhunk://#diff-b1a35a68f14e696205874893c07fd24fdb88882b47c23cc0e0c80a30c7d53759L177-R177) [[2]](diffhunk://#diff-b1a35a68f14e696205874893c07fd24fdb88882b47c23cc0e0c80a30c7d53759L337-R338) [[3]](diffhunk://#diff-b1a35a68f14e696205874893c07fd24fdb88882b47c23cc0e0c80a30c7d53759L479-R478) * [`tests/test_cases.rs`](diffhunk://#diff-4300fcbb75cb722103f54594a5422baf31a5e7753a5ad32e7f9eb2ecdf9b8c83L36-R36): Modified the `set_state` methods in various command implementations to take a reference to `Self::State`. [[1]](diffhunk://#diff-4300fcbb75cb722103f54594a5422baf31a5e7753a5ad32e7f9eb2ecdf9b8c83L36-R36) [[2]](diffhunk://#diff-4300fcbb75cb722103f54594a5422baf31a5e7753a5ad32e7f9eb2ecdf9b8c83L66-R66) [[3]](diffhunk://#diff-4300fcbb75cb722103f54594a5422baf31a5e7753a5ad32e7f9eb2ecdf9b8c83L95-R95) [[4]](diffhunk://#diff-4300fcbb75cb722103f54594a5422baf31a5e7753a5ad32e7f9eb2ecdf9b8c83L147-R147) State handling improvements: * [`src/command.rs`](diffhunk://#diff-de6b9cfd1a256da7900d35e26aa7279bd713110e68e91b52616befb7397848dfL39-R45): Updated the `apply` method in the `AggregateState` trait to return a reference to `self` and modified the implementation for the unit type. * [`src/lib.rs`](diffhunk://#diff-b1a35a68f14e696205874893c07fd24fdb88882b47c23cc0e0c80a30c7d53759L381-R391): Changed the `apply` method in the `StatefulCommandState` implementation to return a reference to `self`. * [`tests/test_cases.rs`](diffhunk://#diff-4300fcbb75cb722103f54594a5422baf31a5e7753a5ad32e7f9eb2ecdf9b8c83L105-R115): Updated the `apply` method in the `StatefulCommandState` implementation to return a reference to `self`.
1 parent e5bf792 commit a5fd077

File tree

5 files changed

+34
-34
lines changed

5 files changed

+34
-34
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mneme"
3-
version = "0.4.2"
3+
version = "0.5.0"
44
authors = ["John Wilger <john@johnwilger.com>"]
55
edition = "2024"
66
description = "An event-sourcing library for Rust projects."

src/command.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ pub trait Command: Clone {
1414

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

17-
fn set_state(&mut self, state: Self::State);
17+
fn set_state(&mut self, state: &Self::State);
1818

1919
fn mark_retry(&self) -> Self
2020
where
@@ -36,9 +36,11 @@ pub trait Command: Clone {
3636
}
3737

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

4242
impl<E: Event> AggregateState<E> for () {
43-
fn apply(&self, _: &E) {}
43+
fn apply(&mut self, _: &E) -> &Self {
44+
self
45+
}
4446
}

src/lib.rs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ mod tests {
174174
type Error = Error;
175175

176176
fn get_state(&self) -> Self::State {}
177-
fn set_state(&mut self, _: Self::State) {}
177+
fn set_state(&mut self, _: &Self::State) {}
178178
fn event_stream_id(&self) -> EventStreamId {
179179
EventStreamId(self.id)
180180
}
@@ -334,8 +334,8 @@ mod tests {
334334
self.state.clone()
335335
}
336336

337-
fn set_state(&mut self, state: Self::State) {
338-
self.state = state;
337+
fn set_state(&mut self, state: &Self::State) {
338+
self.state = state.to_owned();
339339
}
340340

341341
fn event_stream_id(&self) -> EventStreamId {
@@ -378,18 +378,17 @@ mod tests {
378378
}
379379

380380
impl AggregateState<TestEvent> for StatefulCommandState {
381-
fn apply(&self, event: &TestEvent) -> Self {
381+
fn apply(&mut self, event: &TestEvent) -> &Self {
382382
match event {
383-
TestEvent::FooHappened { value, .. } => Self {
384-
foo: Some(*value),
385-
..*self
386-
},
387-
TestEvent::BarHappened { value, .. } => Self {
388-
bar: Some(*value),
389-
..*self
390-
},
391-
_ => Self { ..*self },
383+
TestEvent::FooHappened { value, .. } => {
384+
self.foo = Some(*value);
385+
}
386+
TestEvent::BarHappened { value, .. } => {
387+
self.bar = Some(*value);
388+
}
389+
_ => (),
392390
}
391+
self
393392
}
394393
}
395394
#[tokio::test]
@@ -476,7 +475,7 @@ mod tests {
476475
EventStreamId(self.id)
477476
}
478477
fn get_state(&self) -> Self::State {}
479-
fn set_state(&mut self, _: Self::State) {}
478+
fn set_state(&mut self, _: &Self::State) {}
480479
}
481480

482481
#[tokio::test]

tests/test_cases.rs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ impl Command for NoopCommand {
3333
EventStreamId(self.id)
3434
}
3535
fn get_state(&self) -> Self::State {}
36-
fn set_state(&mut self, _: Self::State) {}
36+
fn set_state(&mut self, _: &Self::State) {}
3737
}
3838

3939
#[derive(Debug, thiserror::Error)]
@@ -63,7 +63,7 @@ impl Command for RejectCommand {
6363
EventStreamId(self.id)
6464
}
6565
fn get_state(&self) -> Self::State {}
66-
fn set_state(&mut self, _: Self::State) {}
66+
fn set_state(&mut self, _: &Self::State) {}
6767
}
6868

6969
#[derive(Clone)]
@@ -92,7 +92,7 @@ impl Command for EventProducingCommand {
9292
EventStreamId(self.id)
9393
}
9494
fn get_state(&self) -> Self::State {}
95-
fn set_state(&mut self, _: Self::State) {}
95+
fn set_state(&mut self, _: &Self::State) {}
9696
}
9797

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

104104
impl AggregateState<TestEvent> for StatefulCommandState {
105-
fn apply(&self, event: &TestEvent) -> Self {
105+
fn apply(&mut self, event: &TestEvent) -> &Self {
106106
match event {
107-
TestEvent::FooHappened { value, .. } => Self {
108-
foo: Some(*value),
109-
..*self
110-
},
111-
TestEvent::BarHappened { value, .. } => Self {
112-
bar: Some(*value),
113-
..*self
114-
},
115-
_ => Self { ..*self },
107+
TestEvent::FooHappened { value, .. } => {
108+
self.foo = Some(*value);
109+
}
110+
TestEvent::BarHappened { value, .. } => {
111+
self.bar = Some(*value);
112+
}
113+
_ => (),
116114
}
115+
self
117116
}
118117
}
119118

@@ -144,8 +143,8 @@ impl Command for StatefulCommand {
144143
self.state.clone()
145144
}
146145

147-
fn set_state(&mut self, state: Self::State) {
148-
self.state = state;
146+
fn set_state(&mut self, state: &Self::State) {
147+
self.state = state.to_owned();
149148
}
150149

151150
fn event_stream_id(&self) -> EventStreamId {

0 commit comments

Comments
 (0)