multiversx_sc/api/managed_types/
static_var_api_flags.rs1use bitflags::bitflags;
2
3bitflags! {
4 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
5 pub struct StaticVarApiFlags: u8 {
6 const NONE = 0b00000000;
7 const CALL_VALUE_EGLD_DIRECT_INITIALIZED = 0b00000001;
8 const CALL_VALUE_ESDT_UNCHECKED_INITIALIZED = 0b00000010;
9 const CALL_VALUE_ESDT_INITIALIZED = 0b00000100;
10 const CALL_VALUE_ALL_INITIALIZED = 0b00001000;
11 }
12}
13
14impl StaticVarApiFlags {
15 pub fn check_and_set(&mut self, other: StaticVarApiFlags) -> bool {
16 let contains_flag = self.contains(other);
17 if !contains_flag {
18 *self |= other;
19 }
20 contains_flag
21 }
22}
23
24#[cfg(test)]
25pub mod tests {
26 use super::StaticVarApiFlags;
27
28 #[test]
29 fn test_check_and_set() {
30 let mut current = StaticVarApiFlags::NONE;
31
32 assert!(current.check_and_set(StaticVarApiFlags::NONE));
33 assert_eq!(current, StaticVarApiFlags::NONE);
34
35 assert!(!current.check_and_set(StaticVarApiFlags::CALL_VALUE_EGLD_DIRECT_INITIALIZED));
36 assert_eq!(
37 current,
38 StaticVarApiFlags::CALL_VALUE_EGLD_DIRECT_INITIALIZED
39 );
40 assert!(current.check_and_set(StaticVarApiFlags::CALL_VALUE_EGLD_DIRECT_INITIALIZED));
41 assert_eq!(
42 current,
43 StaticVarApiFlags::CALL_VALUE_EGLD_DIRECT_INITIALIZED
44 );
45
46 assert!(!current.check_and_set(StaticVarApiFlags::CALL_VALUE_ALL_INITIALIZED));
47 assert_eq!(
48 current,
49 StaticVarApiFlags::CALL_VALUE_EGLD_DIRECT_INITIALIZED
50 | StaticVarApiFlags::CALL_VALUE_ALL_INITIALIZED
51 );
52 assert!(current.check_and_set(StaticVarApiFlags::CALL_VALUE_ALL_INITIALIZED));
53 assert_eq!(
54 current,
55 StaticVarApiFlags::CALL_VALUE_EGLD_DIRECT_INITIALIZED
56 | StaticVarApiFlags::CALL_VALUE_ALL_INITIALIZED
57 );
58 }
59}