capitan_lib/services/
macros.rs1#[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}