algae_mmr/stores/
store.rs1use decanter::prelude::{Hashable, H256};
7use serde::{Deserialize, Serialize};
8
9#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Hashable, PartialEq, Serialize)]
10pub struct MMRStore<T = String>
11where
12 T: ToString,
13{
14 id: H256,
15 data: T,
16}
17
18impl<T> MMRStore<T>
19where
20 T: ToString,
21{
22 pub fn new(data: T) -> Self {
23 Self {
24 id: H256::generate(),
25 data,
26 }
27 }
28 pub fn data(&self) -> &T {
29 &self.data
30 }
31}
32
33impl<T> From<T> for MMRStore<T>
34where
35 T: ToString,
36{
37 fn from(data: T) -> Self {
38 Self::new(data)
39 }
40}
41
42impl<T> std::fmt::Display for MMRStore<T>
43where
44 T: ToString,
45{
46 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
47 let msg = serde_json::json!({
48 "id": self.id,
49 "data": self.data.to_string(),
50 });
51 write!(f, "{}", msg)
52 }
53}
54
55#[cfg(test)]
56mod tests {
57 use super::*;
58
59 #[test]
60 fn test_store() {
61 let a = MMRStore::<usize>::default();
62 let b = MMRStore::<usize>::new(Default::default());
63 assert_eq!(a.data(), b.data())
64 }
65}