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