diff --git a/account-decoder/src/parse_account_data.rs b/account-decoder/src/parse_account_data.rs index d349429c8a..173ad03fb7 100644 --- a/account-decoder/src/parse_account_data.rs +++ b/account-decoder/src/parse_account_data.rs @@ -87,7 +87,7 @@ pub enum ParsableAccount { Vote, } -#[derive(Default)] +#[derive(Clone, Copy, Default)] pub struct AccountAdditionalData { pub spl_token_decimals: Option, } diff --git a/cli-output/src/cli_output.rs b/cli-output/src/cli_output.rs index 4f47cc5cfd..c5b7ff4dae 100644 --- a/cli-output/src/cli_output.rs +++ b/cli-output/src/cli_output.rs @@ -15,7 +15,10 @@ use { inflector::cases::titlecase::to_title_case, serde::{Deserialize, Serialize}, serde_json::{Map, Value}, - solana_account_decoder::{parse_token::UiTokenAccount, UiAccount, UiAccountEncoding}, + solana_account_decoder::{ + parse_account_data::AccountAdditionalData, parse_token::UiTokenAccount, UiAccount, + UiAccountEncoding, UiDataSliceConfig, + }, solana_clap_utils::keypair::SignOnly, solana_rpc_client_api::response::{ RpcAccountBalance, RpcContactInfo, RpcInflationGovernor, RpcInflationRate, RpcKeyedAccount, @@ -108,12 +111,57 @@ pub struct CliAccount { pub use_lamports_unit: bool, } +pub struct CliAccountNewConfig { + pub data_encoding: UiAccountEncoding, + pub additional_data: Option, + pub data_slice_config: Option, + pub use_lamports_unit: bool, +} + +impl Default for CliAccountNewConfig { + fn default() -> Self { + Self { + data_encoding: UiAccountEncoding::Base64, + additional_data: None, + data_slice_config: None, + use_lamports_unit: false, + } + } +} + impl CliAccount { pub fn new(address: &Pubkey, account: &T, use_lamports_unit: bool) -> Self { + Self::new_with_config( + address, + account, + &CliAccountNewConfig { + use_lamports_unit, + ..CliAccountNewConfig::default() + }, + ) + } + + pub fn new_with_config( + address: &Pubkey, + account: &T, + config: &CliAccountNewConfig, + ) -> Self { + let CliAccountNewConfig { + data_encoding, + additional_data, + data_slice_config, + use_lamports_unit, + } = *config; Self { keyed_account: RpcKeyedAccount { pubkey: address.to_string(), - account: UiAccount::encode(address, account, UiAccountEncoding::Base64, None, None), + account: UiAccount::encode( + address, + account, + data_encoding, + additional_data, + data_slice_config, + ), }, use_lamports_unit, }