1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
use {
super::v0::{LoadedAddresses, MessageAddressTableLookup},
thiserror::Error,
};
#[derive(Debug, Error, PartialEq, Eq, Clone)]
pub enum AddressLoaderError {
#[error("Address loading from lookup tables is disabled")]
Disabled,
#[error("Failed to load slot hashes sysvar")]
SlotHashesSysvarNotFound,
#[error("Attempted to lookup addresses from a table that does not exist")]
LookupTableAccountNotFound,
#[error("Attempted to lookup addresses from an account owned by the wrong program")]
InvalidAccountOwner,
#[error("Attempted to lookup addresses from an invalid account")]
InvalidAccountData,
#[error("Address lookup contains an invalid index")]
InvalidLookupIndex,
}
pub trait AddressLoader: Clone {
fn load_addresses(
self,
lookups: &[MessageAddressTableLookup],
) -> Result<LoadedAddresses, AddressLoaderError>;
}
#[derive(Clone)]
pub enum SimpleAddressLoader {
Disabled,
Enabled(LoadedAddresses),
}
impl AddressLoader for SimpleAddressLoader {
fn load_addresses(
self,
_lookups: &[MessageAddressTableLookup],
) -> Result<LoadedAddresses, AddressLoaderError> {
match self {
Self::Disabled => Err(AddressLoaderError::Disabled),
Self::Enabled(loaded_addresses) => Ok(loaded_addresses),
}
}
}