utility_cli_rs/types/
transaction.rs1use 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}