solders_transaction_status_struct/
lib.rs1#![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}