diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index f88c1e632b2601..8456319703d3bf 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -339,18 +339,15 @@ impl JsonRpcRequestProcessor { pubkeys: Vec, config: Option, ) -> Result>>> { - let mut accounts: Vec> = vec![]; - let config = config.unwrap_or_default(); let bank = self.bank(config.commitment); let encoding = config.encoding.unwrap_or(UiAccountEncoding::Base64); check_slice_and_encoding(&encoding, config.data_slice.is_some())?; - for pubkey in pubkeys { - let response_account = - get_encoded_account(&bank, &pubkey, encoding, config.data_slice)?; - accounts.push(response_account) - } + let accounts = pubkeys + .into_iter() + .map(|pubkey| get_encoded_account(&bank, &pubkey, encoding, config.data_slice)) + .collect::>>()?; Ok(new_response(&bank, accounts)) } @@ -384,19 +381,21 @@ impl JsonRpcRequestProcessor { self.get_filtered_program_accounts(&bank, program_id, filters)? } }; - let result = - if program_id == &spl_token_id_v2_0() && encoding == UiAccountEncoding::JsonParsed { - get_parsed_token_accounts(bank.clone(), keyed_accounts.into_iter()).collect() - } else { - let mut encoded_accounts = vec![]; - for (pubkey, account) in keyed_accounts { - encoded_accounts.push(RpcKeyedAccount { + let result = if program_id == &spl_token_id_v2_0() + && encoding == UiAccountEncoding::JsonParsed + { + get_parsed_token_accounts(bank.clone(), keyed_accounts.into_iter()).collect() + } else { + keyed_accounts + .into_iter() + .map(|(pubkey, account)| { + Ok(RpcKeyedAccount { pubkey: pubkey.to_string(), account: encode_account(&account, &pubkey, encoding, data_slice_config)?, - }); - } - encoded_accounts - }; + }) + }) + .collect::>>()? + }; Ok(result).map(|result| match with_context { true => OptionalContext::Context(new_response(&bank, result)), false => OptionalContext::NoContext(result), @@ -2728,10 +2727,10 @@ pub mod rpc_full { max_multiple_accounts ))); } - let mut pubkeys: Vec = vec![]; - for pubkey_str in pubkey_strs { - pubkeys.push(verify_pubkey(&pubkey_str)?); - } + let pubkeys = pubkey_strs + .into_iter() + .map(|pubkey_str| verify_pubkey(&pubkey_str)) + .collect::>>()?; meta.get_multiple_accounts(pubkeys, config) }