solana_block_decoder/address/
loaded_addresses.rs

1use {
2    solana_pubkey::{
3        Pubkey,
4        ParsePubkeyError,
5    },
6    solana_transaction_status_client_types::{
7        UiLoadedAddresses,
8    },
9    serde::{
10        Deserialize, Serialize,
11    },
12    std::{
13        str::FromStr,
14    },
15};
16
17/// Collection of addresses loaded from on-chain lookup tables, split
18/// by readonly and writable.
19#[derive(Clone, Default, Debug, PartialEq, Eq, Serialize, Deserialize)]
20pub struct LoadedAddresses {
21    /// List of addresses for writable loaded accounts
22    pub writable: Vec<Pubkey>,
23    /// List of addresses for read-only loaded accounts
24    pub readonly: Vec<Pubkey>,
25}
26
27impl TryFrom<&UiLoadedAddresses> for LoadedAddresses {
28    type Error = ParsePubkeyError;
29
30    fn try_from(ui_loaded_addresses: &UiLoadedAddresses) -> Result<Self, Self::Error> {
31        let writable: Result<Vec<Pubkey>, _> = ui_loaded_addresses
32            .writable
33            .iter()
34            .map(|s| Pubkey::from_str(s))
35            .collect();
36
37        let readonly: Result<Vec<Pubkey>, _> = ui_loaded_addresses
38            .readonly
39            .iter()
40            .map(|s| Pubkey::from_str(s))
41            .collect();
42
43        Ok(Self {
44            writable: writable?,
45            readonly: readonly?,
46        })
47    }
48}
49
50impl From<LoadedAddresses> for solana_message::v0::LoadedAddresses {
51    fn from(addresses: LoadedAddresses) -> Self {
52        Self {
53            writable: addresses.writable,
54            readonly: addresses.readonly,
55        }
56    }
57}