mithril_common/era/adapters/
dummy.rs1use async_trait::async_trait;
2use std::sync::RwLock;
3
4use crate::era::{EraMarker, EraReaderAdapter};
5use crate::StdResult;
6
7#[derive(Default)]
10pub struct DummyAdapter {
11 markers: RwLock<Vec<EraMarker>>,
12}
13
14impl DummyAdapter {
15 pub fn from_markers(markers: Vec<EraMarker>) -> Self {
17 let myself = Self::default();
18 myself.set_markers(markers);
19
20 myself
21 }
22
23 pub fn set_markers(&self, markers: Vec<EraMarker>) {
25 let mut my_markers = self.markers.write().unwrap();
26 *my_markers = markers;
27 }
28}
29
30#[async_trait]
31impl EraReaderAdapter for DummyAdapter {
32 async fn read(&self) -> StdResult<Vec<EraMarker>> {
33 let markers = self.markers.read().unwrap();
34
35 Ok((*markers.clone()).to_vec())
36 }
37}
38
39#[cfg(test)]
40mod tests {
41 use crate::entities::Epoch;
42
43 use super::super::super::SupportedEra;
44 use super::*;
45
46 #[tokio::test]
47 async fn empty_dummy_adapter() {
48 let adapter = DummyAdapter::default();
49
50 assert!(adapter
51 .read()
52 .await
53 .expect("dummy adapter shall not fail reading")
54 .is_empty());
55 }
56
57 #[tokio::test]
58 async fn dummy_adapter_output() {
59 let markers = vec![
60 EraMarker::new("one", Some(Epoch(1))),
61 EraMarker::new(&SupportedEra::dummy().to_string(), None),
62 EraMarker::new(&SupportedEra::dummy().to_string(), Some(Epoch(10))),
63 ];
64
65 let adapter = DummyAdapter::default();
66 adapter.set_markers(markers.clone());
67
68 assert_eq!(
69 markers,
70 adapter
71 .read()
72 .await
73 .expect("dummy adapter shall not fail reading")
74 );
75 }
76}