ore_api/
loaders.rs

1use steel::*;
2
3use crate::{
4    consts::*,
5    state::{Config, Treasury},
6};
7
8pub trait OreAccountInfoValidation {
9    fn is_bus(&self) -> Result<&Self, ProgramError>;
10    fn is_config(&self) -> Result<&Self, ProgramError>;
11    fn is_treasury(&self) -> Result<&Self, ProgramError>;
12    fn is_treasury_tokens(&self) -> Result<&Self, ProgramError>;
13}
14
15impl OreAccountInfoValidation for AccountInfo<'_> {
16    fn is_bus(&self) -> Result<&Self, ProgramError> {
17        if !BUS_ADDRESSES.contains(self.key) {
18            return Err(ProgramError::InvalidSeeds);
19        }
20        Ok(self)
21    }
22
23    fn is_config(&self) -> Result<&Self, ProgramError> {
24        self.has_address(&CONFIG_ADDRESS)?
25            .is_type::<Config>(&crate::ID)
26    }
27
28    fn is_treasury(&self) -> Result<&Self, ProgramError> {
29        self.has_address(&TREASURY_ADDRESS)?
30            .is_type::<Treasury>(&crate::ID)
31    }
32
33    fn is_treasury_tokens(&self) -> Result<&Self, ProgramError> {
34        self.has_address(&TREASURY_TOKENS_ADDRESS)
35    }
36}