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