fluvio_stream_model/store/
actions.rs

1use std::fmt::Debug;
2use std::fmt::Display;
3use std::fmt;
4
5use crate::core::*;
6use crate::store::*;
7
8/// changes that will be applied to store
9/// add/update has same effect
10#[derive(Debug)]
11pub enum LSUpdate<S, C>
12where
13    S: Spec,
14    S::Status: PartialEq,
15    C: MetadataItem,
16{
17    Mod(MetadataStoreObject<S, C>),
18    Delete(S::IndexKey),
19}
20
21/// changes that happened in the store
22#[derive(Debug, PartialEq, Clone)]
23pub enum LSChange<S, C>
24where
25    S: Spec,
26    S::Status: PartialEq,
27    C: MetadataItem,
28{
29    Add(MetadataStoreObject<S, C>),
30    Mod(MetadataStoreObject<S, C>, MetadataStoreObject<S, C>), // new, old
31    Delete(MetadataStoreObject<S, C>),
32}
33
34impl<S, C> fmt::Display for LSChange<S, C>
35where
36    S: Spec,
37    S::IndexKey: Display,
38    S::Status: PartialEq,
39    C: MetadataItem,
40{
41    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
42        match self {
43            Self::Add(add) => write!(f, "{} Add: {}", S::LABEL, add.key()),
44            Self::Mod(update, _) => write!(f, "{} Mod: {}", S::LABEL, update.key()),
45            Self::Delete(del) => write!(f, "{} Delete: {}", S::LABEL, del.key()),
46        }
47    }
48}
49
50impl<S, C> LSChange<S, C>
51where
52    S: Spec,
53    S::Status: PartialEq,
54    C: MetadataItem,
55{
56    pub fn add(value: impl Into<MetadataStoreObject<S, C>>) -> Self {
57        LSChange::Add(value.into())
58    }
59
60    pub fn update(new: MetadataStoreObject<S, C>, old: MetadataStoreObject<S, C>) -> Self {
61        LSChange::Mod(new, old)
62    }
63
64    pub fn delete(value: MetadataStoreObject<S, C>) -> Self {
65        LSChange::Delete(value)
66    }
67}
68
69/// change in spec
70#[derive(Debug, Eq, PartialEq, Clone)]
71pub enum SpecChange<S>
72where
73    S: Spec,
74{
75    Add(S),
76    Mod(S, S),
77    Delete(S),
78}
79
80impl<S, C> From<LSChange<S, C>> for SpecChange<S>
81where
82    S: Spec,
83    S::Status: PartialEq,
84    C: MetadataItem,
85{
86    fn from(meta: LSChange<S, C>) -> Self {
87        match meta {
88            LSChange::Add(val) => Self::Add(val.spec),
89            LSChange::Mod(new, old) => Self::Mod(new.spec, old.spec),
90            LSChange::Delete(old) => Self::Delete(old.spec),
91        }
92    }
93}