cli-output: add config ctor for CliAccount

This commit is contained in:
Trent Nelson 2022-10-26 15:16:55 -06:00 committed by Trent Nelson
parent ae557a9eb5
commit 2579c0fcb5
2 changed files with 51 additions and 3 deletions

View File

@ -87,7 +87,7 @@ pub enum ParsableAccount {
Vote,
}
#[derive(Default)]
#[derive(Clone, Copy, Default)]
pub struct AccountAdditionalData {
pub spl_token_decimals: Option<u8>,
}

View File

@ -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<AccountAdditionalData>,
pub data_slice_config: Option<UiDataSliceConfig>,
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<T: ReadableAccount>(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<T: ReadableAccount>(
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,
}