node/ledger/write/
ledger_write_state.rs1use 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}