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_noop {
76    ($tag: expr, $lock:expr) => {
77        match $lock.try_write_for(std::time::Duration::from_secs(5)) {
78            Some(data) => data,
79            None => {
80                $crate::log_e!($tag, "Failed to acquire write lock");
81                return;
82            }
83        }
84    };
85}
86
87#[macro_export]
88macro_rules! write_lock_or_return {
89    ($tag: expr, $lock:expr, $code: expr) => {
90        match $lock.try_write_for(std::time::Duration::from_secs(5)) {
91            Some(data) => data,
92            None => {
93                $crate::log_e!($tag, "Failed to acquire write lock");
94                return $code;
95            }
96        }
97    };
98}
99
100#[macro_export]
101macro_rules! serialize_if_not_none {
102    ($state: expr, $field_name: expr, $value: expr) => {
103        if let Some(v) = $value {
104            $state.serialize_field($field_name, v)?
105        }
106    };
107}