sol_cerberus/state/
role.rs

1use anchor_lang::prelude::*;
2
3#[derive(AnchorSerialize, AnchorDeserialize, Clone, Debug)]
4pub enum AddressType {
5    Wallet,
6    Nft,
7    Collection,
8}
9
10impl AddressType {
11    pub fn to_string(&self) -> String {
12        match self {
13            AddressType::Wallet => "Wallet",
14            AddressType::Nft => "Nft",
15            AddressType::Collection => "Collection",
16        }
17        .to_string()
18    }
19}
20
21#[derive(AnchorSerialize, AnchorDeserialize, Debug)]
22pub struct AssignRoleData {
23    pub address: Option<Pubkey>,
24    pub role: String,
25    pub address_type: AddressType,
26    pub expires_at: Option<i64>,
27}
28
29#[account]
30pub struct Role {
31    pub app_id: Pubkey,
32    pub address: Option<Pubkey>,
33    pub role: String,
34    pub address_type: AddressType,
35    pub expires_at: Option<i64>,
36    pub bump: u8,
37}
38
39#[event]
40pub struct RolesChanged {
41    pub time: i64,
42    #[index]
43    pub app_id: Pubkey,
44}