mithril_cardano_node_internal_database/test/double/
immutable_file_observer.rs1use std::ops::Add;
2
3use anyhow::anyhow;
4use async_trait::async_trait;
5use tokio::sync::RwLock;
6
7use mithril_common::StdResult;
8use mithril_common::entities::ImmutableFileNumber;
9
10use crate::{ImmutableFileObserver, ImmutableFileObserverError};
11
12pub struct DumbImmutableFileObserver {
14 pub shall_return: RwLock<Option<ImmutableFileNumber>>,
17}
18
19impl Default for DumbImmutableFileObserver {
20 fn default() -> Self {
21 let mut observer = Self::new();
22 observer.shall_return = RwLock::new(Some(500));
23
24 observer
25 }
26}
27
28impl DumbImmutableFileObserver {
29 pub fn new() -> Self {
31 Self {
32 shall_return: RwLock::new(None),
33 }
34 }
35
36 pub async fn shall_return(&self, what: Option<u64>) -> &Self {
38 let mut shall_return = self.shall_return.write().await;
39 *shall_return = what;
40 self
41 }
42
43 pub async fn increase(&self) -> StdResult<u64> {
46 let new_number = self
47 .shall_return
48 .write()
49 .await
50 .ok_or_else(|| anyhow!(ImmutableFileObserverError::Missing()))?
51 .add(1);
52 self.shall_return(Some(new_number)).await;
53
54 Ok(new_number)
55 }
56}
57
58#[async_trait]
59impl ImmutableFileObserver for DumbImmutableFileObserver {
60 async fn get_last_immutable_number(&self) -> StdResult<ImmutableFileNumber> {
61 self.shall_return
62 .read()
63 .await
64 .ok_or_else(|| anyhow!(ImmutableFileObserverError::Missing()))
65 }
66}