1use solana_client::client_error::ClientError;
14use solana_client::nonblocking::rpc_client::RpcClient;
15use solana_sdk::pubkey::Pubkey;
16
17use crate::AccountDeserialize;
18
19pub async fn fetch_account<T: AccountDeserialize>(
21 client: &RpcClient,
22 address: &Pubkey,
23) -> Result<T, ClientError> {
24 let account = client.get_account(address).await?;
25 T::deserialize(&account.data).map_err(|e| e.into())
26}
27
28pub async fn fetch_accounts<T: AccountDeserialize>(
32 client: &RpcClient,
33 addresses: &[Pubkey],
34) -> Result<Vec<Option<T>>, ClientError> {
35 let accounts = client.get_multiple_accounts(addresses).await?;
36 Ok(accounts
37 .into_iter()
38 .map(|maybe_acc| maybe_acc.and_then(|acc| T::deserialize(&acc.data).ok()))
39 .collect())
40}