Skip to main content

statsig_rust/
macros.rs

1#[macro_export]
2macro_rules! unwrap_or_return {
3    ($res: expr, $code: expr) => {
4        match $res {
5            Some(v) => v,
6            None => return $code,
7        }
8    };
9}
10
11#[macro_export]
12macro_rules! unwrap_or_return_with {
13    ($res: expr, $func:expr) => {
14        match $res {
15            Some(v) => v,
16            None => return $func(),
17        }
18    };
19}
20
21#[macro_export]
22macro_rules! unwrap_or_else {
23    ($res: expr, $else_block:block) => {
24        match $res {
25            Some(v) => v,
26            None => $else_block,
27        }
28    };
29}
30
31#[macro_export]
32macro_rules! ok_or_return_with {
33    ($res:expr, $func:expr) => {
34        match $res {
35            Ok(v) => v,
36            Err(e) => return $func(e),
37        }
38    };
39}
40
41#[macro_export]
42macro_rules! unwrap_or_noop {
43    ($res: expr) => {
44        match $res {
45            Some(v) => v,
46            None => return,
47        }
48    };
49}
50
51#[macro_export]
52macro_rules! read_lock_or_else {
53    ($lock:expr, $else_block:block) => {
54        match $lock.try_read_for(std::time::Duration::from_secs(5)) {
55            Some(data) => data,
56            None => $else_block,
57        }
58    };
59}
60
61#[macro_export]
62macro_rules! read_lock_or_return {
63    ($tag: expr, $lock:expr, $code: expr) => {
64        match $lock.try_read_for(std::time::Duration::from_secs(5)) {
65            Some(data) => data,
66            None => {
67                $crate::log_e!($tag, "Failed to acquire read lock");
68                return $code;
69            }
70        }
71    };
72}
73
74#[macro_export]
75macro_rules! write_lock_or_else {
76    ($lock:expr, $else_block:block) => {
77        match $lock.try_write_for(std::time::Duration::from_secs(5)) {
78            Some(data) => data,
79            None => $else_block,
80        }
81    };
82}
83
84#[macro_export]
85macro_rules! write_lock_or_noop {
86    ($tag: expr, $lock:expr) => {
87        match $lock.try_write_for(std::time::Duration::from_secs(5)) {
88            Some(data) => data,
89            None => {
90                $crate::log_e!($tag, "Failed to acquire write lock");
91                return;
92            }
93        }
94    };
95}
96
97#[macro_export]
98macro_rules! write_lock_or_return {
99    ($tag: expr, $lock:expr, $code: expr) => {
100        match $lock.try_write_for(std::time::Duration::from_secs(5)) {
101            Some(data) => data,
102            None => {
103                $crate::log_e!($tag, "Failed to acquire write lock");
104                return $code;
105            }
106        }
107    };
108}
109
110#[macro_export]
111macro_rules! serialize_if_not_none {
112    ($state: expr, $field_name: expr, $value: expr) => {
113        if let Some(v) = $value {
114            $state.serialize_field($field_name, v)?
115        }
116    };
117}