rocket/trace/
macros.rs

1macro_rules! declare_span_macro {
2    ($name:ident $level:ident) => (
3        declare_span_macro!([$] $name $level);
4    );
5
6    ([$d:tt] $name:ident $level:ident) => (
7        #[doc(hidden)]
8        #[macro_export]
9        macro_rules! $name {
10            (@[$d ($t:tt)+] => $in_scope:expr) => ({
11                $crate::tracing::span!($crate::tracing::Level::$level, $d ($t)+)
12                    .in_scope(|| $in_scope);
13            });
14
15            (@[$d ($t:tt)+] $token:tt $d ($rest:tt)*) => ({
16                $crate::trace::$name!(@[$d ($t)+ $token] $d ($rest)*);
17            });
18
19            // base case
20            ($t:tt $d ($rest:tt)*) => ({
21                $crate::trace::$name!(@[$t] $d ($rest)*);
22            });
23        }
24
25        #[doc(hidden)]
26        pub use $name as $name;
27    );
28}
29
30#[doc(hidden)]
31#[macro_export]
32macro_rules! event {
33    ($level:expr, $($args:tt)*) => {{
34        match $level {
35            $crate::tracing::Level::ERROR => event!(@$crate::tracing::Level::ERROR, $($args)*),
36            $crate::tracing::Level::WARN => event!(@$crate::tracing::Level::WARN, $($args)*),
37            $crate::tracing::Level::INFO => event!(@$crate::tracing::Level::INFO, $($args)*),
38            $crate::tracing::Level::DEBUG => event!(@$crate::tracing::Level::DEBUG, $($args)*),
39            $crate::tracing::Level::TRACE => event!(@$crate::tracing::Level::TRACE, $($args)*),
40        }
41    }};
42
43    (@$level:expr, $n:expr, $($args:tt)*) => {{
44        $crate::tracing::event!(name: $n, target: concat!("rocket::", $n), $level, $($args)*);
45    }};
46}
47
48// Re-exports the macro at $path with the name $name. The point is to allow
49// a `#[macro_use] extern crate rocket` to also automatically import the
50// relevant tracing macros.
51macro_rules! reexport {
52    ($path:ident::$name:ident) => (
53        reexport!([$] $path::$name);
54    );
55
56    ([ $d:tt ] $path:ident::$name:ident) => {
57        #[doc(hidden)]
58        #[macro_export]
59        macro_rules! $name {
60            ($d ($f:tt)*) => {
61                $crate::$path::$name!($d ($f)*)
62            }
63        }
64    };
65}
66
67#[doc(hidden)]
68#[macro_export]
69macro_rules! span {
70    ($level:expr, $($args:tt)*) => {{
71        match $level {
72            $crate::tracing::Level::ERROR =>
73                $crate::tracing::span!($crate::tracing::Level::ERROR, $($args)*),
74            $crate::tracing::Level::WARN =>
75                $crate::tracing::span!($crate::tracing::Level::WARN, $($args)*),
76            $crate::tracing::Level::INFO =>
77                $crate::tracing::span!($crate::tracing::Level::INFO, $($args)*),
78            $crate::tracing::Level::DEBUG =>
79                $crate::tracing::span!($crate::tracing::Level::DEBUG, $($args)*),
80            $crate::tracing::Level::TRACE =>
81                $crate::tracing::span!($crate::tracing::Level::TRACE, $($args)*),
82        }
83    }};
84}
85
86#[doc(inline)]
87pub use span as span;
88
89declare_span_macro!(span_error ERROR);
90declare_span_macro!(span_warn WARN);
91declare_span_macro!(span_info INFO);
92declare_span_macro!(span_debug DEBUG);
93declare_span_macro!(span_trace TRACE);
94
95#[doc(inline)]
96pub use event as event;
97
98reexport!(tracing::error);
99reexport!(tracing::warn);
100reexport!(tracing::info);
101reexport!(tracing::debug);
102reexport!(tracing::trace);
103
104#[doc(hidden)] pub use tracing::error;
105#[doc(hidden)] pub use tracing::warn;
106#[doc(hidden)] pub use tracing::info;
107#[doc(hidden)] pub use tracing::debug;
108#[doc(hidden)] pub use tracing::trace;