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