bark_json/exit/
package.rs

1use bitcoin::{Transaction, Txid};
2#[cfg(feature = "utoipa")]
3use utoipa::ToSchema;
4
5use crate::exit::states::ExitTxOrigin;
6
7#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
8#[cfg_attr(feature = "utoipa", derive(ToSchema))]
9pub struct ExitTransactionPackage {
10	/// The actual unilateral exit transaction containing an anchor output and a spendable amount
11	pub exit: TransactionInfo,
12	/// The child transaction used to spend, and thus confirm, the exit anchor output
13	pub child: Option<ChildTransactionInfo>,
14}
15
16impl From<bark::exit::models::ExitTransactionPackage> for ExitTransactionPackage {
17	fn from(v: bark::exit::models::ExitTransactionPackage) -> Self {
18		ExitTransactionPackage {
19			exit: v.exit.into(),
20			child: v.child.map(|x| x.into()),
21		}
22	}
23}
24
25/// An information struct used to pair the ID of a transaction with the full transaction for ease
26/// of use and readability for the user
27#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
28#[cfg_attr(feature = "utoipa", derive(ToSchema))]
29pub struct TransactionInfo {
30	#[cfg_attr(feature = "utoipa", schema(value_type = String))]
31	pub txid: Txid,
32	#[serde(with = "bitcoin::consensus::serde::With::<bitcoin::consensus::serde::Hex>")]
33	#[cfg_attr(feature = "utoipa", schema(value_type = String))]
34	pub tx: Transaction,
35}
36
37impl From<bark::exit::models::TransactionInfo> for TransactionInfo {
38	fn from(v: bark::exit::models::TransactionInfo) -> Self {
39		TransactionInfo { txid: v.txid, tx: v.tx }
40	}
41}
42/// Represents a child transaction for an exit transaction package with information about the origin
43/// of the transaction
44#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
45#[cfg_attr(feature = "utoipa", derive(ToSchema))]
46pub struct ChildTransactionInfo {
47	pub info: TransactionInfo,
48	pub origin: ExitTxOrigin,
49}
50
51impl From<bark::exit::models::ChildTransactionInfo> for ChildTransactionInfo {
52	fn from(v: bark::exit::models::ChildTransactionInfo) -> Self {
53		ChildTransactionInfo { info: v.info.into(), origin: v.origin.into() }
54	}
55}