use crate::rpc_filter::RpcFilterType; use solana_account_decoder::{UiAccountEncoding, UiDataSliceConfig}; use solana_sdk::{ clock::Epoch, commitment_config::{CommitmentConfig, CommitmentLevel}, }; use solana_transaction_status::{TransactionDetails, UiTransactionEncoding}; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RpcSignatureStatusConfig { pub search_transaction_history: bool, } #[derive(Debug, Default, Clone, Copy, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RpcSendTransactionConfig { #[serde(default)] pub skip_preflight: bool, pub preflight_commitment: Option, pub encoding: Option, } #[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RpcSimulateTransactionConfig { #[serde(default)] pub sig_verify: bool, #[serde(flatten)] pub commitment: Option, pub encoding: Option, } #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub enum RpcLargestAccountsFilter { Circulating, NonCirculating, } #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RpcLargestAccountsConfig { #[serde(flatten)] pub commitment: Option, pub filter: Option, } #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RpcStakeConfig { pub epoch: Option, #[serde(flatten)] pub commitment: Option, } #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RpcAccountInfoConfig { pub encoding: Option, pub data_slice: Option, #[serde(flatten)] pub commitment: Option, } #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RpcProgramAccountsConfig { pub filters: Option>, #[serde(flatten)] pub account_config: RpcAccountInfoConfig, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub enum RpcTransactionLogsFilter { All, AllWithVotes, Mentions(Vec), // base58-encoded list of addresses } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RpcTransactionLogsConfig { #[serde(flatten)] pub commitment: Option, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub enum RpcTokenAccountsFilter { Mint(String), ProgramId(String), } #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RpcSignatureSubscribeConfig { #[serde(flatten)] pub commitment: Option, pub enable_received_notification: Option, } #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RpcGetConfirmedSignaturesForAddress2Config { pub before: Option, // Signature as base-58 string pub until: Option, // Signature as base-58 string pub limit: Option, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(untagged)] pub enum RpcEncodingConfigWrapper { Deprecated(Option), Current(Option), } impl RpcEncodingConfigWrapper { pub fn convert_to_current(&self) -> T { match self { RpcEncodingConfigWrapper::Deprecated(encoding) => T::new_with_encoding(encoding), RpcEncodingConfigWrapper::Current(config) => config.unwrap_or_default(), } } } pub trait EncodingConfig { fn new_with_encoding(encoding: &Option) -> Self; } #[derive(Debug, Clone, Copy, Default, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RpcConfirmedBlockConfig { pub encoding: Option, pub transaction_details: Option, pub rewards: Option, } impl EncodingConfig for RpcConfirmedBlockConfig { fn new_with_encoding(encoding: &Option) -> Self { Self { encoding: *encoding, ..Self::default() } } } impl RpcConfirmedBlockConfig { pub fn rewards_only() -> Self { Self { transaction_details: Some(TransactionDetails::None), ..Self::default() } } } #[derive(Debug, Clone, Copy, Default, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RpcConfirmedTransactionConfig { pub encoding: Option, } impl EncodingConfig for RpcConfirmedTransactionConfig { fn new_with_encoding(encoding: &Option) -> Self { Self { encoding: *encoding, } } }