multiversx_sc/api/managed_types/
static_var_api_flags.rs

1use 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}