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}