capitan_lib/services/
macros.rs

1#[macro_export]
2macro_rules! print_err {
3    ($err: ident) => {
4        log::error!(
5            "error {:?} in thread {:?}, {}:{}:{}",
6            $err,
7            std::thread::current().name().unwrap_or_default(),
8            file!(),
9            line!(),
10            column!()
11        );
12    };
13}
14
15#[macro_export]
16macro_rules! catch_err {
17    ($e: expr) => {
18        match $e {
19            Ok(s) => s,
20            Err(e) => {
21                $crate::print_err!(e);
22                return Err(e);
23            }
24        }
25    };
26}
27
28#[macro_export]
29macro_rules! abort_if_err {
30    (
31        services: $s:ident;
32        run: $run: expr;
33        current: $current: expr;
34        channel: $channel: ident;
35        id: $id: ident;
36    ) => {
37        if let Err(e) = $run {
38            catch_err!($current.abort(e).await);
39            let alive = {
40                let mut $s = $s.write().await;
41                $s.remove(&$id);
42                $s.len() == 0
43            };
44            $channel.send(alive).ok();
45        }
46    };
47}
48
49#[macro_export]
50macro_rules! ignore_print_result {
51    ($e:expr, $s: ident, $p: ident) => {
52        log::info!("error {:?}", &$s);
53        match $e {
54            Ok(_) => log::info!("successfully catched sid {}", $p),
55            Err(e) => {
56                print_err!(e);
57                break e;
58            }
59        }
60    };
61}
62
63#[macro_export]
64macro_rules! yields {
65    ($($b: tt)*) => {
66        async {$($b)*;Ok(())}.await?;
67    };
68}
69
70#[macro_export]
71macro_rules! tryopt {
72    () => {{}};
73    ($e:expr) => {
74        match $e {
75            Some(s) => s,
76            None => {
77                return Err(anyhow::anyhow!(
78                    "returned None on file {}:{}, {}",
79                    file!(),
80                    line!(),
81                    module_path!(),
82                ))
83            }
84        }
85    };
86}