algae_mmr/stores/
store.rs

1/*
2    Appellation: store <module>
3    Contrib: FL03 <jo3mccain@icloud.com>
4    Description: ... summary ...
5*/
6use 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}