macros_rs/
exp.rs

1#[doc(hidden)]
2#[macro_export]
3macro_rules! _lib_inc {
4    ($id:expr) => {{
5        let _rv = $id;
6        $id += 1;
7        _rv
8    }};
9}
10
11#[doc(hidden)]
12#[macro_export]
13macro_rules! _lib_dec {
14    ($id:expr) => {{
15        let _rv = $id;
16        $id -= 1;
17        _rv
18    }};
19}
20
21#[doc(hidden)]
22#[macro_export]
23macro_rules! _lib_ternary {
24    ($c:expr, $v:expr, $v1:expr) => {
25        if $c {
26            $v
27        } else {
28            $v1
29        }
30    };
31}
32
33#[doc(hidden)]
34#[macro_export]
35macro_rules! _lib_then {
36    ($c:expr, $v:expr) => {
37        if $c {
38            $v;
39        }
40    };
41}
42
43#[doc(hidden)]
44#[macro_export]
45macro_rules! _lib_attempt {
46   (@recurse ($a:expr) { } catch ($e:ident) $b:block) => {
47      if let Err ($e) = $a $b
48   };
49   (@recurse ($a:expr) { $e:expr; $($tail:tt)* } $($handler:tt)*) => {
50      $crate::_lib_attempt!{@recurse ($a.and_then (|_| $e)) { $($tail)* } $($handler)*}
51   };
52   ({ $e:expr; $($tail:tt)* } $($handler:tt)*) => {
53      $crate::_lib_attempt!{@recurse ($e) { $($tail)* } $($handler)* }
54   };
55}
56
57#[doc(inline)]
58pub use _lib_inc as inc;
59
60#[doc(inline)]
61pub use _lib_dec as dec;
62
63#[doc(inline)]
64pub use _lib_ternary as ternary;
65
66#[doc(inline)]
67pub use _lib_then as then;
68
69#[doc(inline)]
70pub use _lib_attempt as attempt;