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