solders_transaction_return_data/
lib.rs

1#![allow(clippy::too_many_arguments)]
2use derive_more::{From, Into};
3extern crate base64;
4use solders_pubkey::Pubkey;
5use solders_traits_core::transaction_status_boilerplate;
6
7use pyo3::{prelude::*, types::PyBytes};
8use serde::{Deserialize, Serialize};
9use solana_sdk::transaction_context::TransactionReturnData as TransactionReturnDataOriginal;
10use solana_transaction_status::UiTransactionReturnData;
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 TransactionReturnData(TransactionReturnDataOriginal);
16transaction_status_boilerplate!(TransactionReturnData);
17
18#[richcmp_eq_only]
19#[common_methods]
20#[pymethods]
21impl TransactionReturnData {
22    #[new]
23    pub fn new(program_id: Pubkey, data: Vec<u8>) -> Self {
24        TransactionReturnDataOriginal {
25            program_id: program_id.into(),
26            data,
27        }
28        .into()
29    }
30
31    #[getter]
32    pub fn program_id(&self) -> Pubkey {
33        self.0.program_id.into()
34    }
35
36    #[getter]
37    pub fn data<'a>(&self, py: Python<'a>) -> &'a PyBytes {
38        PyBytes::new(py, &self.0.data)
39    }
40}
41
42impl From<TransactionReturnData> for UiTransactionReturnData {
43    fn from(t: TransactionReturnData) -> Self {
44        TransactionReturnDataOriginal::from(t).into()
45    }
46}
47
48impl From<UiTransactionReturnData> for TransactionReturnData {
49    fn from(r: UiTransactionReturnData) -> Self {
50        Self::new(
51            r.program_id.parse().unwrap(),
52            base64::decode(r.data.0).unwrap(),
53        )
54    }
55}