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