miraland_program/message/
address_loader.rs

1use {
2    super::v0::{LoadedAddresses, MessageAddressTableLookup},
3    thiserror::Error,
4};
5
6#[derive(Debug, Error, PartialEq, Eq, Clone)]
7pub enum AddressLoaderError {
8    /// Address loading from lookup tables is disabled
9    #[error("Address loading from lookup tables is disabled")]
10    Disabled,
11
12    /// Failed to load slot hashes sysvar
13    #[error("Failed to load slot hashes sysvar")]
14    SlotHashesSysvarNotFound,
15
16    /// Attempted to lookup addresses from a table that does not exist
17    #[error("Attempted to lookup addresses from a table that does not exist")]
18    LookupTableAccountNotFound,
19
20    /// Attempted to lookup addresses from an account owned by the wrong program
21    #[error("Attempted to lookup addresses from an account owned by the wrong program")]
22    InvalidAccountOwner,
23
24    /// Attempted to lookup addresses from an invalid account
25    #[error("Attempted to lookup addresses from an invalid account")]
26    InvalidAccountData,
27
28    /// Address lookup contains an invalid index
29    #[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}