node/ledger/write/
ledger_write_actions.rs

1use serde::{Deserialize, Serialize};
2
3use super::{LedgerWriteRequest, LedgerWriteResponse, LedgerWriteState};
4
5pub type LedgerWriteActionWithMetaRef<'a> = redux::ActionWithMeta<&'a LedgerWriteAction>;
6
7#[derive(Serialize, Deserialize, Debug, Clone)]
8pub enum LedgerWriteAction {
9    Init {
10        request: LedgerWriteRequest,
11        on_init: redux::Callback<LedgerWriteRequest>,
12    },
13    Pending,
14    Success {
15        response: LedgerWriteResponse,
16    },
17}
18
19impl redux::EnablingCondition<crate::State> for LedgerWriteAction {
20    fn is_enabled(&self, state: &crate::State, _time: redux::Timestamp) -> bool {
21        match self {
22            LedgerWriteAction::Init { .. } => matches!(
23                &state.ledger.write,
24                LedgerWriteState::Idle { .. } | LedgerWriteState::Success { .. }
25            ),
26            LedgerWriteAction::Pending { .. } => {
27                matches!(&state.ledger.write, LedgerWriteState::Init { .. })
28            }
29            LedgerWriteAction::Success { response } => match &state.ledger.write {
30                LedgerWriteState::Pending { request, .. } => request.kind() == response.kind(),
31                _ => false,
32            },
33        }
34    }
35}
36
37impl From<LedgerWriteAction> for crate::Action {
38    fn from(value: LedgerWriteAction) -> Self {
39        Self::Ledger(value.into())
40    }
41}