utility_cli_rs/types/
transaction.rs

1use unc_primitives::{borsh, borsh::BorshDeserialize};
2
3#[derive(Debug, Clone)]
4pub struct TransactionAsBase64 {
5    pub inner: unc_primitives::transaction::Transaction,
6}
7
8impl From<TransactionAsBase64> for unc_primitives::transaction::Transaction {
9    fn from(transaction: TransactionAsBase64) -> Self {
10        transaction.inner
11    }
12}
13
14impl From<unc_primitives::transaction::Transaction> for TransactionAsBase64 {
15    fn from(value: unc_primitives::transaction::Transaction) -> Self {
16        Self { inner: value }
17    }
18}
19
20impl interactive_clap::ToCli for TransactionAsBase64 {
21    type CliVariant = TransactionAsBase64;
22}
23
24impl std::str::FromStr for TransactionAsBase64 {
25    type Err = String;
26    fn from_str(s: &str) -> Result<Self, Self::Err> {
27        Ok(Self {
28            inner: unc_primitives::transaction::Transaction::try_from_slice(
29                &unc_primitives::serialize::from_base64(s)
30                    .map_err(|err| format!("base64 transaction sequence is invalid: {}", err))?,
31            )
32            .map_err(|err| format!("transaction could not be parsed: {}", err))?,
33        })
34    }
35}
36
37impl std::fmt::Display for TransactionAsBase64 {
38    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
39        let base64_unsigned_transaction = unc_primitives::serialize::to_base64(
40            &borsh::to_vec(&self.inner)
41                .expect("Transaction is not expected to fail on serialization"),
42        );
43        write!(f, "{}", base64_unsigned_transaction)
44    }
45}