Skip to main content

bark_json/exit/
mod.rs

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,
11};
12
13/// A utility type to wrap ExitState children so they can be easily serialized. This also helps with
14/// debugging a lot!
15#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
16#[cfg_attr(feature = "utoipa", derive(ToSchema))]
17#[serde(tag = "type", rename_all = "kebab-case")]
18pub enum ExitState {
19	Start(ExitStartState),
20	Processing(ExitProcessingState),
21	AwaitingDelta(ExitAwaitingDeltaState),
22	Claimable(ExitClaimableState),
23	ClaimInProgress(ExitClaimInProgressState),
24	Claimed(ExitClaimedState),
25	VtxoAlreadySpent(ExitVtxoAlreadySpentState),
26}
27
28impl From<bark::exit::ExitState> for ExitState {
29	fn from(v: bark::exit::ExitState) -> Self {
30		match v {
31			bark::exit::ExitState::Start(s) => ExitState::Start(ExitStartState {
32				tip_height: s.tip_height,
33			}),
34			bark::exit::ExitState::Processing(s) => ExitState::Processing(ExitProcessingState {
35				tip_height: s.tip_height,
36				transactions: s.transactions.into_iter().map(|t| ExitTx { txid: t.txid, status: t.status.into() }).collect(),
37			}),
38			bark::exit::ExitState::AwaitingDelta(s) => ExitState::AwaitingDelta(ExitAwaitingDeltaState {
39				tip_height: s.tip_height,
40				confirmed_block: s.confirmed_block.into(),
41				claimable_height: s.claimable_height,
42			}),
43			bark::exit::ExitState::Claimable(s) => ExitState::Claimable(ExitClaimableState {
44				tip_height: s.tip_height,
45				claimable_since: s.claimable_since.into(),
46				last_scanned_block: s.last_scanned_block.map(Into::into),
47			}),
48			bark::exit::ExitState::ClaimInProgress(s) => ExitState::ClaimInProgress(ExitClaimInProgressState {
49				tip_height: s.tip_height,
50				claimable_since: s.claimable_since.into(),
51				claim_txid: s.claim_txid,
52			}),
53			bark::exit::ExitState::Claimed(s) => ExitState::Claimed(ExitClaimedState {
54				tip_height: s.tip_height,
55				txid: s.txid,
56				block: s.block.into(),
57			}),
58			bark::exit::ExitState::VtxoAlreadySpent(s) => ExitState::VtxoAlreadySpent(
59				ExitVtxoAlreadySpentState { tip_height: s.tip_height },
60			),
61		}
62	}
63}