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}