1pub mod error;
2pub mod package;
3pub mod states;
4
5#[cfg(feature = "utoipa")]
6use utoipa::ToSchema;
7
8use crate::exit::states::{
9 ExitAwaitingDeltaState, ExitProcessingState, ExitClaimInProgressState, ExitClaimableState,
10 ExitClaimedState, ExitStartState, ExitTx, ExitVtxoAlreadySpentState, ExitVtxoSweptState,
11 ExitCanceledState,
12};
13
14#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
17#[cfg_attr(feature = "utoipa", derive(ToSchema))]
18#[serde(tag = "type", rename_all = "kebab-case")]
19pub enum ExitState {
20 Start(ExitStartState),
21 Processing(ExitProcessingState),
22 AwaitingDelta(ExitAwaitingDeltaState),
23 Claimable(ExitClaimableState),
24 ClaimInProgress(ExitClaimInProgressState),
25 Claimed(ExitClaimedState),
26 VtxoAlreadySpent(ExitVtxoAlreadySpentState),
27 VtxoSwept(ExitVtxoSweptState),
28 Canceled(ExitCanceledState),
29}
30
31impl From<bark::exit::ExitState> for ExitState {
32 fn from(v: bark::exit::ExitState) -> Self {
33 match v {
34 bark::exit::ExitState::Start(s) => ExitState::Start(ExitStartState {
35 tip_height: s.tip_height,
36 }),
37 bark::exit::ExitState::Processing(s) => ExitState::Processing(ExitProcessingState {
38 tip_height: s.tip_height,
39 transactions: s.transactions.into_iter().map(|t| ExitTx { txid: t.txid, status: t.status.into() }).collect(),
40 }),
41 bark::exit::ExitState::AwaitingDelta(s) => ExitState::AwaitingDelta(ExitAwaitingDeltaState {
42 tip_height: s.tip_height,
43 confirmed_block: s.confirmed_block.into(),
44 claimable_height: s.claimable_height,
45 }),
46 bark::exit::ExitState::Claimable(s) => ExitState::Claimable(ExitClaimableState {
47 tip_height: s.tip_height,
48 claimable_since: s.claimable_since.into(),
49 last_scanned_block: s.last_scanned_block.map(Into::into),
50 }),
51 bark::exit::ExitState::ClaimInProgress(s) => ExitState::ClaimInProgress(ExitClaimInProgressState {
52 tip_height: s.tip_height,
53 claimable_since: s.claimable_since.into(),
54 claim_txid: s.claim_txid,
55 }),
56 bark::exit::ExitState::Claimed(s) => ExitState::Claimed(ExitClaimedState {
57 tip_height: s.tip_height,
58 txid: s.txid,
59 block: s.block.into(),
60 }),
61 bark::exit::ExitState::VtxoAlreadySpent(s) => ExitState::VtxoAlreadySpent(
62 ExitVtxoAlreadySpentState { tip_height: s.tip_height },
63 ),
64 bark::exit::ExitState::VtxoSwept(s) => ExitState::VtxoSwept(
65 ExitVtxoSweptState {
66 tip_height: s.tip_height,
67 spent_inputs: s.spent_inputs,
68 },
69 ),
70 bark::exit::ExitState::Canceled(s) => ExitState::Canceled(
71 ExitCanceledState { tip_height: s.tip_height },
72 ),
73 }
74 }
75}
76
77#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
80#[cfg_attr(feature = "utoipa", derive(ToSchema))]
81#[serde(rename_all = "kebab-case")]
82pub enum ExitStateKind {
83 Start,
84 Processing,
85 AwaitingDelta,
86 Claimable,
87 ClaimInProgress,
88 Claimed,
89 VtxoAlreadySpent,
90 VtxoSwept,
91 Canceled,
92}
93
94impl From<bark::exit::ExitStateKind> for ExitStateKind {
95 fn from(v: bark::exit::ExitStateKind) -> Self {
96 match v {
97 bark::exit::ExitStateKind::Start => ExitStateKind::Start,
98 bark::exit::ExitStateKind::Processing => ExitStateKind::Processing,
99 bark::exit::ExitStateKind::AwaitingDelta => ExitStateKind::AwaitingDelta,
100 bark::exit::ExitStateKind::Claimable => ExitStateKind::Claimable,
101 bark::exit::ExitStateKind::ClaimInProgress => ExitStateKind::ClaimInProgress,
102 bark::exit::ExitStateKind::Claimed => ExitStateKind::Claimed,
103 bark::exit::ExitStateKind::VtxoAlreadySpent => ExitStateKind::VtxoAlreadySpent,
104 bark::exit::ExitStateKind::VtxoSwept => ExitStateKind::VtxoSwept,
105 bark::exit::ExitStateKind::Canceled => ExitStateKind::Canceled,
106 }
107 }
108}
109
110impl std::fmt::Display for ExitStateKind {
111 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
112 let s = match self {
113 ExitStateKind::Start => "start",
114 ExitStateKind::Processing => "processing",
115 ExitStateKind::AwaitingDelta => "awaiting-delta",
116 ExitStateKind::Claimable => "claimable",
117 ExitStateKind::ClaimInProgress => "claim-in-progress",
118 ExitStateKind::Claimed => "claimed",
119 ExitStateKind::VtxoAlreadySpent => "vtxo-already-spent",
120 ExitStateKind::VtxoSwept => "vtxo-swept",
121 ExitStateKind::Canceled => "canceled",
122 };
123 f.write_str(s)
124 }
125}