node/ledger/write/
ledger_write_state.rs

1use serde::{Deserialize, Serialize};
2
3use super::{LedgerWriteRequest, LedgerWriteResponse};
4
5#[derive(Serialize, Deserialize, Debug, Clone)]
6pub enum LedgerWriteState {
7    Idle,
8    Init {
9        time: redux::Timestamp,
10        request: LedgerWriteRequest,
11    },
12    Pending {
13        time: redux::Timestamp,
14        request: LedgerWriteRequest,
15    },
16    Success {
17        time: redux::Timestamp,
18        request: LedgerWriteRequest,
19        response: LedgerWriteResponse,
20    },
21}
22
23impl LedgerWriteState {
24    pub fn request(&self) -> Option<&LedgerWriteRequest> {
25        match self {
26            Self::Idle => None,
27            Self::Init { request, .. }
28            | Self::Pending { request, .. }
29            | Self::Success { request, .. } => Some(request),
30        }
31    }
32
33    pub fn pending_requests(
34        &self,
35    ) -> impl Iterator<Item = (&LedgerWriteRequest, redux::Timestamp)> {
36        std::iter::once(match self {
37            Self::Pending { time, request } => Some((request, *time)),
38            _ => None,
39        })
40        .flatten()
41    }
42
43    pub fn is_busy(&self) -> bool {
44        self.pending_requests().peekable().peek().is_some()
45    }
46}
47
48impl Default for LedgerWriteState {
49    fn default() -> Self {
50        Self::Idle
51    }
52}