solders_transaction_status_struct/
lib.rs

1#![allow(clippy::too_many_arguments)]
2use derive_more::{From, Into};
3use solders_commitment_config::CommitmentConfig;
4use solders_traits_core::transaction_status_boilerplate;
5use solders_transaction_confirmation_status::TransactionConfirmationStatus;
6use solders_transaction_error::TransactionErrorType;
7
8use pyo3::prelude::*;
9use serde::{Deserialize, Serialize};
10use solana_transaction_status::TransactionStatus as TransactionStatusOriginal;
11use solders_macros::{common_methods, richcmp_eq_only};
12
13#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, From, Into)]
14#[pyclass(module = "solders.transaction_status", subclass)]
15pub struct TransactionStatus(pub TransactionStatusOriginal);
16
17transaction_status_boilerplate!(TransactionStatus);
18
19#[richcmp_eq_only]
20#[common_methods]
21#[pymethods]
22impl TransactionStatus {
23    #[new]
24    pub fn new(
25        slot: u64,
26        confirmations: Option<usize>,
27        status: Option<TransactionErrorType>,
28        err: Option<TransactionErrorType>,
29        confirmation_status: Option<TransactionConfirmationStatus>,
30    ) -> Self {
31        TransactionStatusOriginal {
32            slot,
33            confirmations,
34            status: status.map_or(Ok(()), |e| Err(e.into())),
35            err: err.map(Into::into),
36            confirmation_status: confirmation_status.map(Into::into),
37        }
38        .into()
39    }
40
41    #[getter]
42    pub fn slot(&self) -> u64 {
43        self.0.slot
44    }
45    #[getter]
46    pub fn confirmations(&self) -> Option<usize> {
47        self.0.confirmations
48    }
49    #[getter]
50    pub fn status(&self) -> Option<TransactionErrorType> {
51        self.0
52            .status
53            .clone()
54            .map_or_else(|e| Some(e.into()), |_s| None)
55    }
56    #[getter]
57    pub fn err(&self) -> Option<TransactionErrorType> {
58        self.0.err.clone().map(Into::into)
59    }
60    #[getter]
61    pub fn confirmation_status(&self) -> Option<TransactionConfirmationStatus> {
62        self.0.confirmation_status.clone().map(Into::into)
63    }
64
65    pub fn satisfies_commitment(&self, commitment_config: CommitmentConfig) -> bool {
66        self.0.satisfies_commitment(commitment_config.into())
67    }
68
69    pub fn find_confirmation_status(&self) -> TransactionConfirmationStatus {
70        self.0.confirmation_status().into()
71    }
72}