dharitri_chain_core/types/flags/
dcdt_local_role_flags.rs1use super::DcdtLocalRole;
2use bitflags::bitflags;
3
4bitflags! {
5 #[derive(PartialEq, Clone, Copy)]
6 pub struct DcdtLocalRoleFlags: u64 {
7 const NONE = 0b00000000_00000000;
8 const MINT = 0b00000000_00000001;
9 const BURN = 0b00000000_00000010;
10 const NFT_CREATE = 0b00000000_00000100;
11 const NFT_ADD_QUANTITY = 0b00000000_00001000;
12 const NFT_BURN = 0b00000000_00010000;
13 const NFT_UPDATE_ATTRIBUTES = 0b00000000_00100000;
14 const NFT_ADD_URI = 0b00000000_01000000;
15 const NFT_RECREATE = 0b00000000_10000000;
16 const MODIFY_CREATOR = 0b00000001_00000000;
17 const MODIFY_ROYALTIES = 0b00000010_00000000;
18 const SET_NEW_URI = 0b00000100_00000000;
19 const TRANSFER = 0b00001000_00000000;
21 }
22}
23
24impl DcdtLocalRoleFlags {
25 pub fn has_role(&self, role: &DcdtLocalRole) -> bool {
26 *self & role.to_flag() != DcdtLocalRoleFlags::NONE
27 }
28
29 pub fn iter_roles(&self) -> impl Iterator<Item = &DcdtLocalRole> {
30 DcdtLocalRole::iter_all().filter(move |role| self.has_role(role))
31 }
32}
33
34#[cfg(test)]
35pub mod tests {
36 use super::*;
37 use alloc::vec::Vec;
38
39 #[test]
40 fn test_flags_has_role() {
41 let flags = DcdtLocalRoleFlags::MINT;
42 assert!(flags.has_role(&DcdtLocalRole::Mint));
43 let flags = DcdtLocalRoleFlags::MINT | DcdtLocalRoleFlags::BURN;
44 assert!(flags.has_role(&DcdtLocalRole::Mint));
45 let flags = DcdtLocalRoleFlags::NONE;
46 assert!(!flags.has_role(&DcdtLocalRole::Mint));
47 let flags = DcdtLocalRoleFlags::BURN;
48 assert!(!flags.has_role(&DcdtLocalRole::Mint));
49 }
50
51 #[test]
52 fn test_flags_iter_role() {
53 let flags = DcdtLocalRoleFlags::MINT;
54 assert_eq!(
55 flags.iter_roles().collect::<Vec<&DcdtLocalRole>>(),
56 alloc::vec![&DcdtLocalRole::Mint],
57 );
58
59 let flags = DcdtLocalRoleFlags::MINT | DcdtLocalRoleFlags::BURN;
60 assert_eq!(
61 flags.iter_roles().collect::<Vec<&DcdtLocalRole>>(),
62 alloc::vec![&DcdtLocalRole::Mint, &DcdtLocalRole::Burn],
63 );
64
65 let flags = DcdtLocalRoleFlags::NONE;
66 assert_eq!(
67 flags.iter_roles().collect::<Vec<&DcdtLocalRole>>(),
68 Vec::<&DcdtLocalRole>::new(),
69 );
70 }
71}