cqrs_es2/example_impl/
queries.rs

1use 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}