spl_token_client/
output.rs

1#![cfg(feature = "display")]
2
3use {crate::client::RpcClientResponse, solana_cli_output::display::writeln_transaction, std::fmt};
4
5impl fmt::Display for RpcClientResponse {
6    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
7        match self {
8            RpcClientResponse::Signature(signature) => writeln!(f, "Signature: {}", signature),
9            RpcClientResponse::Transaction(transaction) => {
10                writeln!(f, "Transaction:")?;
11                writeln_transaction(f, &transaction.clone().into(), None, "  ", None, None)
12            }
13            RpcClientResponse::Simulation(result) => {
14                writeln!(f, "Simulation:")?;
15                // maybe implement another formatter on simulation result?
16                writeln!(f, "{result:?}")
17            }
18        }
19    }
20}
21
22#[cfg(test)]
23mod tests {
24    use {
25        super::*,
26        solana_sdk::{
27            hash::Hash,
28            pubkey::Pubkey,
29            signature::{Signature, Signer, SIGNATURE_BYTES},
30            signer::keypair::Keypair,
31            transaction::Transaction,
32        },
33        solana_system_interface::instruction as system_instruction,
34    };
35
36    #[test]
37    fn display_signature() {
38        let signature_bytes = [202u8; SIGNATURE_BYTES];
39        let signature = RpcClientResponse::Signature(Signature::from(signature_bytes));
40        println!("{}", signature);
41    }
42
43    #[test]
44    fn display_transaction() {
45        let payer = Keypair::new();
46        let transaction = Transaction::new_signed_with_payer(
47            &[system_instruction::transfer(
48                &payer.pubkey(),
49                &Pubkey::new_unique(),
50                10,
51            )],
52            Some(&payer.pubkey()),
53            &[&payer],
54            Hash::default(),
55        );
56        let transaction = RpcClientResponse::Transaction(transaction);
57        println!("{}", transaction);
58    }
59}