cqrs_es2/example_impl/
queries.rs1use serde::{
2 Deserialize,
3 Serialize,
4};
5use std::fmt::Debug;
6
7use crate::{
8 EventContext,
9 IEventConsumer,
10 IQuery,
11};
12
13use super::{
14 commands::CustomerCommand,
15 events::CustomerEvent,
16};
17
18#[derive(
19 Debug,
20 PartialEq,
21 Default,
22 Clone,
23 Serialize,
24 Deserialize
25)]
26pub struct CustomerContactQuery {
27 pub name: String,
28 pub email: String,
29 pub latest_address: String,
30}
31
32impl IQuery<CustomerCommand, CustomerEvent> for CustomerContactQuery {
33 fn query_type() -> &'static str {
34 "customer_contact_query"
35 }
36}
37
38impl IEventConsumer<CustomerCommand, CustomerEvent>
39 for CustomerContactQuery
40{
41 fn update(
42 &mut self,
43 event: &EventContext<CustomerCommand, CustomerEvent>,
44 ) {
45 match &event.payload {
46 CustomerEvent::NameAdded(payload) => {
47 self.name = payload.changed_name.clone();
48 },
49 CustomerEvent::EmailUpdated(payload) => {
50 self.email = payload.new_email.clone();
51 },
52 CustomerEvent::AddressUpdated(payload) => {
53 self.latest_address = payload.new_address.clone();
54 },
55 }
56 }
57}