miracle_api/
loaders.rs

1use steel::*;
2
3use crate::{
4    consts::*,
5    state::{Config, Metrics, Snapshot, Treasury},
6};
7
8pub trait MiracleAccountInfoValidation {
9    fn is_config(&self) -> Result<&Self, ProgramError>;
10    fn is_treasury(&self) -> Result<&Self, ProgramError>;
11    fn is_treasury_tokens(&self) -> Result<&Self, ProgramError>;
12    fn is_snapshot(&self) -> Result<&Self, ProgramError>;
13    fn is_metrics(&self) -> Result<&Self, ProgramError>;
14}
15
16impl MiracleAccountInfoValidation for AccountInfo<'_> {
17    fn is_config(&self) -> Result<&Self, ProgramError> {
18        self.has_address(&CONFIG_ADDRESS)?
19            .is_type::<Config>(&crate::ID)
20    }
21
22    fn is_treasury(&self) -> Result<&Self, ProgramError> {
23        self.has_address(&TREASURY_ADDRESS)?
24            .is_type::<Treasury>(&crate::ID)
25    }
26
27    fn is_treasury_tokens(&self) -> Result<&Self, ProgramError> {
28        self.has_address(&TREASURY_TOKENS_ADDRESS)
29    }
30
31    fn is_snapshot(&self) -> Result<&Self, ProgramError> {
32        self.has_address(&SNAPSHOT_ADDRESS)?
33            .is_type::<Snapshot>(&crate::ID)
34    }
35
36    fn is_metrics(&self) -> Result<&Self, ProgramError> {
37        self.has_address(&METRICS_ADDRESS)?
38            .is_type::<Metrics>(&crate::ID)
39    }
40}