Skip to main content

tracing_unlikely/
lib.rs

1#![doc = include_str!("../README.md")]
2
3#[doc(hidden)]
4pub use tracing::*;
5
6/// Constructs an event at the error level.
7#[macro_export]
8macro_rules! error {
9    // Name / target / parent.
10    (name: $name:expr, target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
11        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::ERROR, { $($field)* }, $($arg)*)
12    );
13    (name: $name:expr, target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)* ) => (
14        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::ERROR, { $($k).+ $($field)* })
15    );
16    (name: $name:expr, target: $target:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)* ) => (
17        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::ERROR, { ?$($k).+ $($field)* })
18    );
19    (name: $name:expr, target: $target:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)* ) => (
20        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::ERROR, { %$($k).+ $($field)* })
21    );
22    (name: $name:expr, target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
23        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::ERROR, {}, $($arg)+)
24    );
25
26    // Name / target.
27    (name: $name:expr, target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
28        $crate::event!(name: $name, target: $target, $crate::Level::ERROR, { $($field)* }, $($arg)*)
29    );
30    (name: $name:expr, target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
31        $crate::event!(name: $name, target: $target, $crate::Level::ERROR, { $($k).+ $($field)* })
32    );
33    (name: $name:expr, target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
34        $crate::event!(name: $name, target: $target, $crate::Level::ERROR, { ?$($k).+ $($field)* })
35    );
36    (name: $name:expr, target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
37        $crate::event!(name: $name, target: $target, $crate::Level::ERROR, { %$($k).+ $($field)* })
38    );
39    (name: $name:expr, target: $target:expr, $($arg:tt)+ ) => (
40        $crate::event!(name: $name, target: $target, $crate::Level::ERROR, {}, $($arg)+)
41    );
42
43    // Target / parent.
44    (target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
45        $crate::event!(target: $target, parent: $parent, $crate::Level::ERROR, { $($field)* }, $($arg)*)
46    );
47    (target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)* ) => (
48        $crate::event!(target: $target, parent: $parent, $crate::Level::ERROR, { $($k).+ $($field)* })
49    );
50    (target: $target:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)* ) => (
51        $crate::event!(target: $target, parent: $parent, $crate::Level::ERROR, { ?$($k).+ $($field)* })
52    );
53    (target: $target:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)* ) => (
54        $crate::event!(target: $target, parent: $parent, $crate::Level::ERROR, { %$($k).+ $($field)* })
55    );
56    (target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
57        $crate::event!(target: $target, parent: $parent, $crate::Level::ERROR, {}, $($arg)+)
58    );
59
60    // Name / parent.
61    (name: $name:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
62        $crate::event!(name: $name, parent: $parent, $crate::Level::ERROR, { $($field)* }, $($arg)*)
63    );
64    (name: $name:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)* ) => (
65        $crate::event!(name: $name, parent: $parent, $crate::Level::ERROR, { $($k).+ $($field)* })
66    );
67    (name: $name:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)* ) => (
68        $crate::event!(name: $name, parent: $parent, $crate::Level::ERROR, { ?$($k).+ $($field)* })
69    );
70    (name: $name:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)* ) => (
71        $crate::event!(name: $name, parent: $parent, $crate::Level::ERROR, { %$($k).+ $($field)* })
72    );
73    (name: $name:expr, parent: $parent:expr, $($arg:tt)+ ) => (
74        $crate::event!(name: $name, parent: $parent, $crate::Level::ERROR, {}, $($arg)+)
75    );
76
77    // Name.
78    (name: $name:expr, { $($field:tt)* }, $($arg:tt)* ) => (
79        $crate::event!(name: $name, $crate::Level::ERROR, { $($field)* }, $($arg)*)
80    );
81    (name: $name:expr, $($k:ident).+ $($field:tt)* ) => (
82        $crate::event!(name: $name, $crate::Level::ERROR, { $($k).+ $($field)* })
83    );
84    (name: $name:expr, ?$($k:ident).+ $($field:tt)* ) => (
85        $crate::event!(name: $name, $crate::Level::ERROR, { ?$($k).+ $($field)* })
86    );
87    (name: $name:expr, %$($k:ident).+ $($field:tt)* ) => (
88        $crate::event!(name: $name, $crate::Level::ERROR, { %$($k).+ $($field)* })
89    );
90    (name: $name:expr, $($arg:tt)+ ) => (
91        $crate::event!(name: $name, $crate::Level::ERROR, {}, $($arg)+)
92    );
93
94    // Target.
95    (target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
96        $crate::event!(target: $target, $crate::Level::ERROR, { $($field)* }, $($arg)*)
97    );
98    (target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
99        $crate::event!(target: $target, $crate::Level::ERROR, { $($k).+ $($field)* })
100    );
101    (target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
102        $crate::event!(target: $target, $crate::Level::ERROR, { ?$($k).+ $($field)* })
103    );
104    (target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
105        $crate::event!(target: $target, $crate::Level::ERROR, { %$($k).+ $($field)* })
106    );
107    (target: $target:expr, $($arg:tt)+ ) => (
108        $crate::event!(target: $target, $crate::Level::ERROR, {}, $($arg)+)
109    );
110
111    // Parent.
112    (parent: $parent:expr, { $($field:tt)+ }, $($arg:tt)+ ) => (
113        $crate::event!(
114            target: module_path!(),
115            parent: $parent,
116            $crate::Level::ERROR,
117            { $($field)+ },
118            $($arg)+
119        )
120    );
121    (parent: $parent:expr, $($k:ident).+ = $($field:tt)*) => (
122        $crate::event!(
123            target: module_path!(),
124            parent: $parent,
125            $crate::Level::ERROR,
126            { $($k).+ = $($field)*}
127        )
128    );
129    (parent: $parent:expr, ?$($k:ident).+ = $($field:tt)*) => (
130        $crate::event!(
131            target: module_path!(),
132            parent: $parent,
133            $crate::Level::ERROR,
134            { ?$($k).+ = $($field)*}
135        )
136    );
137    (parent: $parent:expr, %$($k:ident).+ = $($field:tt)*) => (
138        $crate::event!(
139            target: module_path!(),
140            parent: $parent,
141            $crate::Level::ERROR,
142            { %$($k).+ = $($field)*}
143        )
144    );
145    (parent: $parent:expr, $($k:ident).+, $($field:tt)*) => (
146        $crate::event!(
147            target: module_path!(),
148            parent: $parent,
149            $crate::Level::ERROR,
150            { $($k).+, $($field)*}
151        )
152    );
153    (parent: $parent:expr, ?$($k:ident).+, $($field:tt)*) => (
154        $crate::event!(
155            target: module_path!(),
156            parent: $parent,
157            $crate::Level::ERROR,
158            { ?$($k).+, $($field)*}
159        )
160    );
161    (parent: $parent:expr, %$($k:ident).+, $($field:tt)*) => (
162        $crate::event!(
163            target: module_path!(),
164            parent: $parent,
165            $crate::Level::ERROR,
166            { %$($k).+, $($field)*}
167        )
168    );
169    (parent: $parent:expr, $($arg:tt)+) => (
170        $crate::event!(
171            target: module_path!(),
172            parent: $parent,
173            $crate::Level::ERROR,
174            {},
175            $($arg)+
176        )
177    );
178
179    // ...
180    ({ $($field:tt)+ }, $($arg:tt)+ ) => (
181        $crate::event!(
182            target: module_path!(),
183            $crate::Level::ERROR,
184            { $($field)+ },
185            $($arg)+
186        )
187    );
188    ($($k:ident).+ = $($field:tt)*) => (
189        $crate::event!(
190            target: module_path!(),
191            $crate::Level::ERROR,
192            { $($k).+ = $($field)*}
193        )
194    );
195    (?$($k:ident).+ = $($field:tt)*) => (
196        $crate::event!(
197            target: module_path!(),
198            $crate::Level::ERROR,
199            { ?$($k).+ = $($field)*}
200        )
201    );
202    (%$($k:ident).+ = $($field:tt)*) => (
203        $crate::event!(
204            target: module_path!(),
205            $crate::Level::ERROR,
206            { %$($k).+ = $($field)*}
207        )
208    );
209    ($($k:ident).+, $($field:tt)*) => (
210        $crate::event!(
211            target: module_path!(),
212            $crate::Level::ERROR,
213            { $($k).+, $($field)*}
214        )
215    );
216    (?$($k:ident).+, $($field:tt)*) => (
217        $crate::event!(
218            target: module_path!(),
219            $crate::Level::ERROR,
220            { ?$($k).+, $($field)*}
221        )
222    );
223    (%$($k:ident).+, $($field:tt)*) => (
224        $crate::event!(
225            target: module_path!(),
226            $crate::Level::ERROR,
227            { %$($k).+, $($field)*}
228        )
229    );
230    (?$($k:ident).+) => (
231        $crate::event!(
232            target: module_path!(),
233            $crate::Level::ERROR,
234            { ?$($k).+ }
235        )
236    );
237    (%$($k:ident).+) => (
238        $crate::event!(
239            target: module_path!(),
240            $crate::Level::ERROR,
241            { %$($k).+ }
242        )
243    );
244    ($($k:ident).+) => (
245        $crate::event!(
246            target: module_path!(),
247            $crate::Level::ERROR,
248            { $($k).+ }
249        )
250    );
251    ($($arg:tt)+) => (
252        $crate::event!(
253            target: module_path!(),
254            $crate::Level::ERROR,
255            $($arg)+
256        )
257    );
258}
259
260/// Constructs a span at the error level.
261#[macro_export]
262macro_rules! error_span {
263    (target: $target:expr, parent: $parent:expr, $name:expr, $($field:tt)*) => {
264        $crate::span!(
265            target: $target,
266            parent: $parent,
267            $crate::Level::ERROR,
268            $name,
269            $($field)*
270        )
271    };
272    (target: $target:expr, parent: $parent:expr, $name:expr) => {
273        $crate::error_span!(target: $target, parent: $parent, $name,)
274    };
275    (parent: $parent:expr, $name:expr, $($field:tt)*) => {
276        $crate::span!(
277            target: module_path!(),
278            parent: $parent,
279            $crate::Level::ERROR,
280            $name,
281            $($field)*
282        )
283    };
284    (parent: $parent:expr, $name:expr) => {
285        $crate::error_span!(parent: $parent, $name,)
286    };
287    (target: $target:expr, $name:expr, $($field:tt)*) => {
288        $crate::span!(
289            target: $target,
290            $crate::Level::ERROR,
291            $name,
292            $($field)*
293        )
294    };
295    (target: $target:expr, $name:expr) => {
296        $crate::error_span!(target: $target, $name,)
297    };
298    ($name:expr, $($field:tt)*) => {
299        $crate::span!(
300            target: module_path!(),
301            $crate::Level::ERROR,
302            $name,
303            $($field)*
304        )
305    };
306    ($name:expr) => {$crate::error_span!($name,)};
307}
308
309/// Constructs an event at the warn level.
310#[macro_export]
311macro_rules! warn {
312    // Name / target / parent.
313    (name: $name:expr, target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
314        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::WARN, { $($field)* }, $($arg)*)
315    );
316    (name: $name:expr, target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)* ) => (
317        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::WARN, { $($k).+ $($field)* })
318    );
319    (name: $name:expr, target: $target:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)* ) => (
320        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::WARN, { ?$($k).+ $($field)* })
321    );
322    (name: $name:expr, target: $target:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)* ) => (
323        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::WARN, { %$($k).+ $($field)* })
324    );
325    (name: $name:expr, target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
326        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::WARN, {}, $($arg)+)
327    );
328
329    // Name / target.
330    (name: $name:expr, target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
331        $crate::event!(name: $name, target: $target, $crate::Level::WARN, { $($field)* }, $($arg)*)
332    );
333    (name: $name:expr, target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
334        $crate::event!(name: $name, target: $target, $crate::Level::WARN, { $($k).+ $($field)* })
335    );
336    (name: $name:expr, target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
337        $crate::event!(name: $name, target: $target, $crate::Level::WARN, { ?$($k).+ $($field)* })
338    );
339    (name: $name:expr, target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
340        $crate::event!(name: $name, target: $target, $crate::Level::WARN, { %$($k).+ $($field)* })
341    );
342    (name: $name:expr, target: $target:expr, $($arg:tt)+ ) => (
343        $crate::event!(name: $name, target: $target, $crate::Level::WARN, {}, $($arg)+)
344    );
345
346    // Target / parent.
347    (target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
348        $crate::event!(target: $target, parent: $parent, $crate::Level::WARN, { $($field)* }, $($arg)*)
349    );
350    (target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)* ) => (
351        $crate::event!(target: $target, parent: $parent, $crate::Level::WARN, { $($k).+ $($field)* })
352    );
353    (target: $target:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)* ) => (
354        $crate::event!(target: $target, parent: $parent, $crate::Level::WARN, { ?$($k).+ $($field)* })
355    );
356    (target: $target:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)* ) => (
357        $crate::event!(target: $target, parent: $parent, $crate::Level::WARN, { %$($k).+ $($field)* })
358    );
359    (target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
360        $crate::event!(target: $target, parent: $parent, $crate::Level::WARN, {}, $($arg)+)
361    );
362
363    // Name / parent.
364    (name: $name:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
365        $crate::event!(name: $name, parent: $parent, $crate::Level::WARN, { $($field)* }, $($arg)*)
366    );
367    (name: $name:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)* ) => (
368        $crate::event!(name: $name, parent: $parent, $crate::Level::WARN, { $($k).+ $($field)* })
369    );
370    (name: $name:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)* ) => (
371        $crate::event!(name: $name, parent: $parent, $crate::Level::WARN, { ?$($k).+ $($field)* })
372    );
373    (name: $name:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)* ) => (
374        $crate::event!(name: $name, parent: $parent, $crate::Level::WARN, { %$($k).+ $($field)* })
375    );
376    (name: $name:expr, parent: $parent:expr, $($arg:tt)+ ) => (
377        $crate::event!(name: $name, parent: $parent, $crate::Level::WARN, {}, $($arg)+)
378    );
379
380    // Name.
381    (name: $name:expr, { $($field:tt)* }, $($arg:tt)* ) => (
382        $crate::event!(name: $name, $crate::Level::WARN, { $($field)* }, $($arg)*)
383    );
384    (name: $name:expr, $($k:ident).+ $($field:tt)* ) => (
385        $crate::event!(name: $name, $crate::Level::WARN, { $($k).+ $($field)* })
386    );
387    (name: $name:expr, ?$($k:ident).+ $($field:tt)* ) => (
388        $crate::event!(name: $name, $crate::Level::WARN, { ?$($k).+ $($field)* })
389    );
390    (name: $name:expr, %$($k:ident).+ $($field:tt)* ) => (
391        $crate::event!(name: $name, $crate::Level::WARN, { %$($k).+ $($field)* })
392    );
393    (name: $name:expr, $($arg:tt)+ ) => (
394        $crate::event!(name: $name, $crate::Level::WARN, {}, $($arg)+)
395    );
396
397    // Target.
398    (target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
399        $crate::event!(target: $target, $crate::Level::WARN, { $($field)* }, $($arg)*)
400    );
401    (target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
402        $crate::event!(target: $target, $crate::Level::WARN, { $($k).+ $($field)* })
403    );
404    (target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
405        $crate::event!(target: $target, $crate::Level::WARN, { ?$($k).+ $($field)* })
406    );
407    (target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
408        $crate::event!(target: $target, $crate::Level::WARN, { %$($k).+ $($field)* })
409    );
410    (target: $target:expr, $($arg:tt)+ ) => (
411        $crate::event!(target: $target, $crate::Level::WARN, {}, $($arg)+)
412    );
413
414    // Parent.
415    (parent: $parent:expr, { $($field:tt)+ }, $($arg:tt)+ ) => (
416        $crate::event!(
417            target: module_path!(),
418            parent: $parent,
419            $crate::Level::WARN,
420            { $($field)+ },
421            $($arg)+
422        )
423    );
424    (parent: $parent:expr, $($k:ident).+ = $($field:tt)*) => (
425        $crate::event!(
426            target: module_path!(),
427            parent: $parent,
428            $crate::Level::WARN,
429            { $($k).+ = $($field)*}
430        )
431    );
432    (parent: $parent:expr, ?$($k:ident).+ = $($field:tt)*) => (
433        $crate::event!(
434            target: module_path!(),
435            parent: $parent,
436            $crate::Level::WARN,
437            { ?$($k).+ = $($field)*}
438        )
439    );
440    (parent: $parent:expr, %$($k:ident).+ = $($field:tt)*) => (
441        $crate::event!(
442            target: module_path!(),
443            parent: $parent,
444            $crate::Level::WARN,
445            { %$($k).+ = $($field)*}
446        )
447    );
448    (parent: $parent:expr, $($k:ident).+, $($field:tt)*) => (
449        $crate::event!(
450            target: module_path!(),
451            parent: $parent,
452            $crate::Level::WARN,
453            { $($k).+, $($field)*}
454        )
455    );
456    (parent: $parent:expr, ?$($k:ident).+, $($field:tt)*) => (
457        $crate::event!(
458            target: module_path!(),
459            parent: $parent,
460            $crate::Level::WARN,
461            { ?$($k).+, $($field)*}
462        )
463    );
464    (parent: $parent:expr, %$($k:ident).+, $($field:tt)*) => (
465        $crate::event!(
466            target: module_path!(),
467            parent: $parent,
468            $crate::Level::WARN,
469            { %$($k).+, $($field)*}
470        )
471    );
472    (parent: $parent:expr, $($arg:tt)+) => (
473        $crate::event!(
474            target: module_path!(),
475            parent: $parent,
476            $crate::Level::WARN,
477            {},
478            $($arg)+
479        )
480    );
481
482    // ...
483    ({ $($field:tt)+ }, $($arg:tt)+ ) => (
484        $crate::event!(
485            target: module_path!(),
486            $crate::Level::WARN,
487            { $($field)+ },
488            $($arg)+
489        )
490    );
491    ($($k:ident).+ = $($field:tt)*) => (
492        $crate::event!(
493            target: module_path!(),
494            $crate::Level::WARN,
495            { $($k).+ = $($field)*}
496        )
497    );
498    (?$($k:ident).+ = $($field:tt)*) => (
499        $crate::event!(
500            target: module_path!(),
501            $crate::Level::WARN,
502            { ?$($k).+ = $($field)*}
503        )
504    );
505    (%$($k:ident).+ = $($field:tt)*) => (
506        $crate::event!(
507            target: module_path!(),
508            $crate::Level::WARN,
509            { %$($k).+ = $($field)*}
510        )
511    );
512    ($($k:ident).+, $($field:tt)*) => (
513        $crate::event!(
514            target: module_path!(),
515            $crate::Level::WARN,
516            { $($k).+, $($field)*}
517        )
518    );
519    (?$($k:ident).+, $($field:tt)*) => (
520        $crate::event!(
521            target: module_path!(),
522            $crate::Level::WARN,
523            { ?$($k).+, $($field)*}
524        )
525    );
526    (%$($k:ident).+, $($field:tt)*) => (
527        $crate::event!(
528            target: module_path!(),
529            $crate::Level::WARN,
530            { %$($k).+, $($field)*}
531        )
532    );
533    (?$($k:ident).+) => (
534        $crate::event!(
535            target: module_path!(),
536            $crate::Level::WARN,
537            { ?$($k).+ }
538        )
539    );
540    (%$($k:ident).+) => (
541        $crate::event!(
542            target: module_path!(),
543            $crate::Level::WARN,
544            { %$($k).+ }
545        )
546    );
547    ($($k:ident).+) => (
548        $crate::event!(
549            target: module_path!(),
550            $crate::Level::WARN,
551            { $($k).+ }
552        )
553    );
554    ($($arg:tt)+) => (
555        $crate::event!(
556            target: module_path!(),
557            $crate::Level::WARN,
558            $($arg)+
559        )
560    );
561}
562
563/// Constructs a span at the warn level.
564#[macro_export]
565macro_rules! warn_span {
566    (target: $target:expr, parent: $parent:expr, $name:expr, $($field:tt)*) => {
567        $crate::span!(
568            target: $target,
569            parent: $parent,
570            $crate::Level::WARN,
571            $name,
572            $($field)*
573        )
574    };
575    (target: $target:expr, parent: $parent:expr, $name:expr) => {
576        $crate::warn_span!(target: $target, parent: $parent, $name,)
577    };
578    (parent: $parent:expr, $name:expr, $($field:tt)*) => {
579        $crate::span!(
580            target: module_path!(),
581            parent: $parent,
582            $crate::Level::WARN,
583            $name,
584            $($field)*
585        )
586    };
587    (parent: $parent:expr, $name:expr) => {
588        $crate::warn_span!(parent: $parent, $name,)
589    };
590    (target: $target:expr, $name:expr, $($field:tt)*) => {
591        $crate::span!(
592            target: $target,
593            $crate::Level::WARN,
594            $name,
595            $($field)*
596        )
597    };
598    (target: $target:expr, $name:expr) => {
599        $crate::warn_span!(target: $target, $name,)
600    };
601    ($name:expr, $($field:tt)*) => {
602        $crate::span!(
603            target: module_path!(),
604            $crate::Level::WARN,
605            $name,
606            $($field)*
607        )
608    };
609    ($name:expr) => {$crate::warn_span!($name,)};
610}
611
612/// Constructs an event at the info level.
613#[macro_export]
614macro_rules! info {
615    // Name / target / parent.
616    (name: $name:expr, target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
617        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::INFO, { $($field)* }, $($arg)*)
618    );
619    (name: $name:expr, target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)* ) => (
620        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::INFO, { $($k).+ $($field)* })
621    );
622    (name: $name:expr, target: $target:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)* ) => (
623        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::INFO, { ?$($k).+ $($field)* })
624    );
625    (name: $name:expr, target: $target:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)* ) => (
626        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::INFO, { %$($k).+ $($field)* })
627    );
628    (name: $name:expr, target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
629        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::INFO, {}, $($arg)+)
630    );
631
632    // Name / target.
633    (name: $name:expr, target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
634        $crate::event!(name: $name, target: $target, $crate::Level::INFO, { $($field)* }, $($arg)*)
635    );
636    (name: $name:expr, target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
637        $crate::event!(name: $name, target: $target, $crate::Level::INFO, { $($k).+ $($field)* })
638    );
639    (name: $name:expr, target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
640        $crate::event!(name: $name, target: $target, $crate::Level::INFO, { ?$($k).+ $($field)* })
641    );
642    (name: $name:expr, target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
643        $crate::event!(name: $name, target: $target, $crate::Level::INFO, { %$($k).+ $($field)* })
644    );
645    (name: $name:expr, target: $target:expr, $($arg:tt)+ ) => (
646        $crate::event!(name: $name, target: $target, $crate::Level::INFO, {}, $($arg)+)
647    );
648
649    // Target / parent.
650    (target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
651        $crate::event!(target: $target, parent: $parent, $crate::Level::INFO, { $($field)* }, $($arg)*)
652    );
653    (target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)* ) => (
654        $crate::event!(target: $target, parent: $parent, $crate::Level::INFO, { $($k).+ $($field)* })
655    );
656    (target: $target:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)* ) => (
657        $crate::event!(target: $target, parent: $parent, $crate::Level::INFO, { ?$($k).+ $($field)* })
658    );
659    (target: $target:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)* ) => (
660        $crate::event!(target: $target, parent: $parent, $crate::Level::INFO, { %$($k).+ $($field)* })
661    );
662    (target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
663        $crate::event!(target: $target, parent: $parent, $crate::Level::INFO, {}, $($arg)+)
664    );
665
666    // Name / parent.
667    (name: $name:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
668        $crate::event!(name: $name, parent: $parent, $crate::Level::INFO, { $($field)* }, $($arg)*)
669    );
670    (name: $name:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)* ) => (
671        $crate::event!(name: $name, parent: $parent, $crate::Level::INFO, { $($k).+ $($field)* })
672    );
673    (name: $name:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)* ) => (
674        $crate::event!(name: $name, parent: $parent, $crate::Level::INFO, { ?$($k).+ $($field)* })
675    );
676    (name: $name:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)* ) => (
677        $crate::event!(name: $name, parent: $parent, $crate::Level::INFO, { %$($k).+ $($field)* })
678    );
679    (name: $name:expr, parent: $parent:expr, $($arg:tt)+ ) => (
680        $crate::event!(name: $name, parent: $parent, $crate::Level::INFO, {}, $($arg)+)
681    );
682
683    // Name.
684    (name: $name:expr, { $($field:tt)* }, $($arg:tt)* ) => (
685        $crate::event!(name: $name, $crate::Level::INFO, { $($field)* }, $($arg)*)
686    );
687    (name: $name:expr, $($k:ident).+ $($field:tt)* ) => (
688        $crate::event!(name: $name, $crate::Level::INFO, { $($k).+ $($field)* })
689    );
690    (name: $name:expr, ?$($k:ident).+ $($field:tt)* ) => (
691        $crate::event!(name: $name, $crate::Level::INFO, { ?$($k).+ $($field)* })
692    );
693    (name: $name:expr, %$($k:ident).+ $($field:tt)* ) => (
694        $crate::event!(name: $name, $crate::Level::INFO, { %$($k).+ $($field)* })
695    );
696    (name: $name:expr, $($arg:tt)+ ) => (
697        $crate::event!(name: $name, $crate::Level::INFO, {}, $($arg)+)
698    );
699
700    // Target.
701    (target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
702        $crate::event!(target: $target, $crate::Level::INFO, { $($field)* }, $($arg)*)
703    );
704    (target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
705        $crate::event!(target: $target, $crate::Level::INFO, { $($k).+ $($field)* })
706    );
707    (target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
708        $crate::event!(target: $target, $crate::Level::INFO, { ?$($k).+ $($field)* })
709    );
710    (target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
711        $crate::event!(target: $target, $crate::Level::INFO, { %$($k).+ $($field)* })
712    );
713    (target: $target:expr, $($arg:tt)+ ) => (
714        $crate::event!(target: $target, $crate::Level::INFO, {}, $($arg)+)
715    );
716
717    // Parent.
718    (parent: $parent:expr, { $($field:tt)+ }, $($arg:tt)+ ) => (
719        $crate::event!(
720            target: module_path!(),
721            parent: $parent,
722            $crate::Level::INFO,
723            { $($field)+ },
724            $($arg)+
725        )
726    );
727    (parent: $parent:expr, $($k:ident).+ = $($field:tt)*) => (
728        $crate::event!(
729            target: module_path!(),
730            parent: $parent,
731            $crate::Level::INFO,
732            { $($k).+ = $($field)*}
733        )
734    );
735    (parent: $parent:expr, ?$($k:ident).+ = $($field:tt)*) => (
736        $crate::event!(
737            target: module_path!(),
738            parent: $parent,
739            $crate::Level::INFO,
740            { ?$($k).+ = $($field)*}
741        )
742    );
743    (parent: $parent:expr, %$($k:ident).+ = $($field:tt)*) => (
744        $crate::event!(
745            target: module_path!(),
746            parent: $parent,
747            $crate::Level::INFO,
748            { %$($k).+ = $($field)*}
749        )
750    );
751    (parent: $parent:expr, $($k:ident).+, $($field:tt)*) => (
752        $crate::event!(
753            target: module_path!(),
754            parent: $parent,
755            $crate::Level::INFO,
756            { $($k).+, $($field)*}
757        )
758    );
759    (parent: $parent:expr, ?$($k:ident).+, $($field:tt)*) => (
760        $crate::event!(
761            target: module_path!(),
762            parent: $parent,
763            $crate::Level::INFO,
764            { ?$($k).+, $($field)*}
765        )
766    );
767    (parent: $parent:expr, %$($k:ident).+, $($field:tt)*) => (
768        $crate::event!(
769            target: module_path!(),
770            parent: $parent,
771            $crate::Level::INFO,
772            { %$($k).+, $($field)*}
773        )
774    );
775    (parent: $parent:expr, $($arg:tt)+) => (
776        $crate::event!(
777            target: module_path!(),
778            parent: $parent,
779            $crate::Level::INFO,
780            {},
781            $($arg)+
782        )
783    );
784
785    // ...
786    ({ $($field:tt)+ }, $($arg:tt)+ ) => (
787        $crate::event!(
788            target: module_path!(),
789            $crate::Level::INFO,
790            { $($field)+ },
791            $($arg)+
792        )
793    );
794    ($($k:ident).+ = $($field:tt)*) => (
795        $crate::event!(
796            target: module_path!(),
797            $crate::Level::INFO,
798            { $($k).+ = $($field)*}
799        )
800    );
801    (?$($k:ident).+ = $($field:tt)*) => (
802        $crate::event!(
803            target: module_path!(),
804            $crate::Level::INFO,
805            { ?$($k).+ = $($field)*}
806        )
807    );
808    (%$($k:ident).+ = $($field:tt)*) => (
809        $crate::event!(
810            target: module_path!(),
811            $crate::Level::INFO,
812            { %$($k).+ = $($field)*}
813        )
814    );
815    ($($k:ident).+, $($field:tt)*) => (
816        $crate::event!(
817            target: module_path!(),
818            $crate::Level::INFO,
819            { $($k).+, $($field)*}
820        )
821    );
822    (?$($k:ident).+, $($field:tt)*) => (
823        $crate::event!(
824            target: module_path!(),
825            $crate::Level::INFO,
826            { ?$($k).+, $($field)*}
827        )
828    );
829    (%$($k:ident).+, $($field:tt)*) => (
830        $crate::event!(
831            target: module_path!(),
832            $crate::Level::INFO,
833            { %$($k).+, $($field)*}
834        )
835    );
836    (?$($k:ident).+) => (
837        $crate::event!(
838            target: module_path!(),
839            $crate::Level::INFO,
840            { ?$($k).+ }
841        )
842    );
843    (%$($k:ident).+) => (
844        $crate::event!(
845            target: module_path!(),
846            $crate::Level::INFO,
847            { %$($k).+ }
848        )
849    );
850    ($($k:ident).+) => (
851        $crate::event!(
852            target: module_path!(),
853            $crate::Level::INFO,
854            { $($k).+ }
855        )
856    );
857    ($($arg:tt)+) => (
858        $crate::event!(
859            target: module_path!(),
860            $crate::Level::INFO,
861            $($arg)+
862        )
863    );
864}
865
866/// Constructs a span at the info level.
867#[macro_export]
868macro_rules! info_span {
869    (target: $target:expr, parent: $parent:expr, $name:expr, $($field:tt)*) => {
870        $crate::span!(
871            target: $target,
872            parent: $parent,
873            $crate::Level::INFO,
874            $name,
875            $($field)*
876        )
877    };
878    (target: $target:expr, parent: $parent:expr, $name:expr) => {
879        $crate::info_span!(target: $target, parent: $parent, $name,)
880    };
881    (parent: $parent:expr, $name:expr, $($field:tt)*) => {
882        $crate::span!(
883            target: module_path!(),
884            parent: $parent,
885            $crate::Level::INFO,
886            $name,
887            $($field)*
888        )
889    };
890    (parent: $parent:expr, $name:expr) => {
891        $crate::info_span!(parent: $parent, $name,)
892    };
893    (target: $target:expr, $name:expr, $($field:tt)*) => {
894        $crate::span!(
895            target: $target,
896            $crate::Level::INFO,
897            $name,
898            $($field)*
899        )
900    };
901    (target: $target:expr, $name:expr) => {
902        $crate::info_span!(target: $target, $name,)
903    };
904    ($name:expr, $($field:tt)*) => {
905        $crate::span!(
906            target: module_path!(),
907            $crate::Level::INFO,
908            $name,
909            $($field)*
910        )
911    };
912    ($name:expr) => {$crate::info_span!($name,)};
913}
914
915/// Constructs an event at the debug level.
916#[macro_export]
917macro_rules! debug {
918    // Name / target / parent.
919    (name: $name:expr, target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
920        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::DEBUG, { $($field)* }, $($arg)*)
921    );
922    (name: $name:expr, target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)* ) => (
923        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::DEBUG, { $($k).+ $($field)* })
924    );
925    (name: $name:expr, target: $target:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)* ) => (
926        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::DEBUG, { ?$($k).+ $($field)* })
927    );
928    (name: $name:expr, target: $target:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)* ) => (
929        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::DEBUG, { %$($k).+ $($field)* })
930    );
931    (name: $name:expr, target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
932        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::DEBUG, {}, $($arg)+)
933    );
934
935    // Name / target.
936    (name: $name:expr, target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
937        $crate::event!(name: $name, target: $target, $crate::Level::DEBUG, { $($field)* }, $($arg)*)
938    );
939    (name: $name:expr, target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
940        $crate::event!(name: $name, target: $target, $crate::Level::DEBUG, { $($k).+ $($field)* })
941    );
942    (name: $name:expr, target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
943        $crate::event!(name: $name, target: $target, $crate::Level::DEBUG, { ?$($k).+ $($field)* })
944    );
945    (name: $name:expr, target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
946        $crate::event!(name: $name, target: $target, $crate::Level::DEBUG, { %$($k).+ $($field)* })
947    );
948    (name: $name:expr, target: $target:expr, $($arg:tt)+ ) => (
949        $crate::event!(name: $name, target: $target, $crate::Level::DEBUG, {}, $($arg)+)
950    );
951
952    // Target / parent.
953    (target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
954        $crate::event!(target: $target, parent: $parent, $crate::Level::DEBUG, { $($field)* }, $($arg)*)
955    );
956    (target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)* ) => (
957        $crate::event!(target: $target, parent: $parent, $crate::Level::DEBUG, { $($k).+ $($field)* })
958    );
959    (target: $target:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)* ) => (
960        $crate::event!(target: $target, parent: $parent, $crate::Level::DEBUG, { ?$($k).+ $($field)* })
961    );
962    (target: $target:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)* ) => (
963        $crate::event!(target: $target, parent: $parent, $crate::Level::DEBUG, { %$($k).+ $($field)* })
964    );
965    (target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
966        $crate::event!(target: $target, parent: $parent, $crate::Level::DEBUG, {}, $($arg)+)
967    );
968
969    // Name / parent.
970    (name: $name:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
971        $crate::event!(name: $name, parent: $parent, $crate::Level::DEBUG, { $($field)* }, $($arg)*)
972    );
973    (name: $name:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)* ) => (
974        $crate::event!(name: $name, parent: $parent, $crate::Level::DEBUG, { $($k).+ $($field)* })
975    );
976    (name: $name:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)* ) => (
977        $crate::event!(name: $name, parent: $parent, $crate::Level::DEBUG, { ?$($k).+ $($field)* })
978    );
979    (name: $name:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)* ) => (
980        $crate::event!(name: $name, parent: $parent, $crate::Level::DEBUG, { %$($k).+ $($field)* })
981    );
982    (name: $name:expr, parent: $parent:expr, $($arg:tt)+ ) => (
983        $crate::event!(name: $name, parent: $parent, $crate::Level::DEBUG, {}, $($arg)+)
984    );
985
986    // Name.
987    (name: $name:expr, { $($field:tt)* }, $($arg:tt)* ) => (
988        $crate::event!(name: $name, $crate::Level::DEBUG, { $($field)* }, $($arg)*)
989    );
990    (name: $name:expr, $($k:ident).+ $($field:tt)* ) => (
991        $crate::event!(name: $name, $crate::Level::DEBUG, { $($k).+ $($field)* })
992    );
993    (name: $name:expr, ?$($k:ident).+ $($field:tt)* ) => (
994        $crate::event!(name: $name, $crate::Level::DEBUG, { ?$($k).+ $($field)* })
995    );
996    (name: $name:expr, %$($k:ident).+ $($field:tt)* ) => (
997        $crate::event!(name: $name, $crate::Level::DEBUG, { %$($k).+ $($field)* })
998    );
999    (name: $name:expr, $($arg:tt)+ ) => (
1000        $crate::event!(name: $name, $crate::Level::DEBUG, {}, $($arg)+)
1001    );
1002
1003    // Target.
1004    (target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
1005        $crate::event!(target: $target, $crate::Level::DEBUG, { $($field)* }, $($arg)*)
1006    );
1007    (target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
1008        $crate::event!(target: $target, $crate::Level::DEBUG, { $($k).+ $($field)* })
1009    );
1010    (target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
1011        $crate::event!(target: $target, $crate::Level::DEBUG, { ?$($k).+ $($field)* })
1012    );
1013    (target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
1014        $crate::event!(target: $target, $crate::Level::DEBUG, { %$($k).+ $($field)* })
1015    );
1016    (target: $target:expr, $($arg:tt)+ ) => (
1017        $crate::event!(target: $target, $crate::Level::DEBUG, {}, $($arg)+)
1018    );
1019
1020    // Parent.
1021    (parent: $parent:expr, { $($field:tt)+ }, $($arg:tt)+ ) => (
1022        $crate::event!(
1023            target: module_path!(),
1024            parent: $parent,
1025            $crate::Level::DEBUG,
1026            { $($field)+ },
1027            $($arg)+
1028        )
1029    );
1030    (parent: $parent:expr, $($k:ident).+ = $($field:tt)*) => (
1031        $crate::event!(
1032            target: module_path!(),
1033            parent: $parent,
1034            $crate::Level::DEBUG,
1035            { $($k).+ = $($field)*}
1036        )
1037    );
1038    (parent: $parent:expr, ?$($k:ident).+ = $($field:tt)*) => (
1039        $crate::event!(
1040            target: module_path!(),
1041            parent: $parent,
1042            $crate::Level::DEBUG,
1043            { ?$($k).+ = $($field)*}
1044        )
1045    );
1046    (parent: $parent:expr, %$($k:ident).+ = $($field:tt)*) => (
1047        $crate::event!(
1048            target: module_path!(),
1049            parent: $parent,
1050            $crate::Level::DEBUG,
1051            { %$($k).+ = $($field)*}
1052        )
1053    );
1054    (parent: $parent:expr, $($k:ident).+, $($field:tt)*) => (
1055        $crate::event!(
1056            target: module_path!(),
1057            parent: $parent,
1058            $crate::Level::DEBUG,
1059            { $($k).+, $($field)*}
1060        )
1061    );
1062    (parent: $parent:expr, ?$($k:ident).+, $($field:tt)*) => (
1063        $crate::event!(
1064            target: module_path!(),
1065            parent: $parent,
1066            $crate::Level::DEBUG,
1067            { ?$($k).+, $($field)*}
1068        )
1069    );
1070    (parent: $parent:expr, %$($k:ident).+, $($field:tt)*) => (
1071        $crate::event!(
1072            target: module_path!(),
1073            parent: $parent,
1074            $crate::Level::DEBUG,
1075            { %$($k).+, $($field)*}
1076        )
1077    );
1078    (parent: $parent:expr, $($arg:tt)+) => (
1079        $crate::event!(
1080            target: module_path!(),
1081            parent: $parent,
1082            $crate::Level::DEBUG,
1083            {},
1084            $($arg)+
1085        )
1086    );
1087
1088    // ...
1089    ({ $($field:tt)+ }, $($arg:tt)+ ) => (
1090        $crate::event!(
1091            target: module_path!(),
1092            $crate::Level::DEBUG,
1093            { $($field)+ },
1094            $($arg)+
1095        )
1096    );
1097    ($($k:ident).+ = $($field:tt)*) => (
1098        $crate::event!(
1099            target: module_path!(),
1100            $crate::Level::DEBUG,
1101            { $($k).+ = $($field)*}
1102        )
1103    );
1104    (?$($k:ident).+ = $($field:tt)*) => (
1105        $crate::event!(
1106            target: module_path!(),
1107            $crate::Level::DEBUG,
1108            { ?$($k).+ = $($field)*}
1109        )
1110    );
1111    (%$($k:ident).+ = $($field:tt)*) => (
1112        $crate::event!(
1113            target: module_path!(),
1114            $crate::Level::DEBUG,
1115            { %$($k).+ = $($field)*}
1116        )
1117    );
1118    ($($k:ident).+, $($field:tt)*) => (
1119        $crate::event!(
1120            target: module_path!(),
1121            $crate::Level::DEBUG,
1122            { $($k).+, $($field)*}
1123        )
1124    );
1125    (?$($k:ident).+, $($field:tt)*) => (
1126        $crate::event!(
1127            target: module_path!(),
1128            $crate::Level::DEBUG,
1129            { ?$($k).+, $($field)*}
1130        )
1131    );
1132    (%$($k:ident).+, $($field:tt)*) => (
1133        $crate::event!(
1134            target: module_path!(),
1135            $crate::Level::DEBUG,
1136            { %$($k).+, $($field)*}
1137        )
1138    );
1139    (?$($k:ident).+) => (
1140        $crate::event!(
1141            target: module_path!(),
1142            $crate::Level::DEBUG,
1143            { ?$($k).+ }
1144        )
1145    );
1146    (%$($k:ident).+) => (
1147        $crate::event!(
1148            target: module_path!(),
1149            $crate::Level::DEBUG,
1150            { %$($k).+ }
1151        )
1152    );
1153    ($($k:ident).+) => (
1154        $crate::event!(
1155            target: module_path!(),
1156            $crate::Level::DEBUG,
1157            { $($k).+ }
1158        )
1159    );
1160    ($($arg:tt)+) => (
1161        $crate::event!(
1162            target: module_path!(),
1163            $crate::Level::DEBUG,
1164            $($arg)+
1165        )
1166    );
1167}
1168
1169/// Constructs a span at the debug level.
1170#[macro_export]
1171macro_rules! debug_span {
1172    (target: $target:expr, parent: $parent:expr, $name:expr, $($field:tt)*) => {
1173        $crate::span!(
1174            target: $target,
1175            parent: $parent,
1176            $crate::Level::DEBUG,
1177            $name,
1178            $($field)*
1179        )
1180    };
1181    (target: $target:expr, parent: $parent:expr, $name:expr) => {
1182        $crate::debug_span!(target: $target, parent: $parent, $name,)
1183    };
1184    (parent: $parent:expr, $name:expr, $($field:tt)*) => {
1185        $crate::span!(
1186            target: module_path!(),
1187            parent: $parent,
1188            $crate::Level::DEBUG,
1189            $name,
1190            $($field)*
1191        )
1192    };
1193    (parent: $parent:expr, $name:expr) => {
1194        $crate::debug_span!(parent: $parent, $name,)
1195    };
1196    (target: $target:expr, $name:expr, $($field:tt)*) => {
1197        $crate::span!(
1198            target: $target,
1199            $crate::Level::DEBUG,
1200            $name,
1201            $($field)*
1202        )
1203    };
1204    (target: $target:expr, $name:expr) => {
1205        $crate::debug_span!(target: $target, $name,)
1206    };
1207    ($name:expr, $($field:tt)*) => {
1208        $crate::span!(
1209            target: module_path!(),
1210            $crate::Level::DEBUG,
1211            $name,
1212            $($field)*
1213        )
1214    };
1215    ($name:expr) => {$crate::debug_span!($name,)};
1216}
1217
1218/// Constructs an event at the trace level.
1219#[macro_export]
1220macro_rules! trace {
1221    // Name / target / parent.
1222    (name: $name:expr, target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
1223        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::TRACE, { $($field)* }, $($arg)*)
1224    );
1225    (name: $name:expr, target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)* ) => (
1226        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::TRACE, { $($k).+ $($field)* })
1227    );
1228    (name: $name:expr, target: $target:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)* ) => (
1229        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::TRACE, { ?$($k).+ $($field)* })
1230    );
1231    (name: $name:expr, target: $target:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)* ) => (
1232        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::TRACE, { %$($k).+ $($field)* })
1233    );
1234    (name: $name:expr, target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
1235        $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::TRACE, {}, $($arg)+)
1236    );
1237
1238    // Name / target.
1239    (name: $name:expr, target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
1240        $crate::event!(name: $name, target: $target, $crate::Level::TRACE, { $($field)* }, $($arg)*)
1241    );
1242    (name: $name:expr, target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
1243        $crate::event!(name: $name, target: $target, $crate::Level::TRACE, { $($k).+ $($field)* })
1244    );
1245    (name: $name:expr, target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
1246        $crate::event!(name: $name, target: $target, $crate::Level::TRACE, { ?$($k).+ $($field)* })
1247    );
1248    (name: $name:expr, target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
1249        $crate::event!(name: $name, target: $target, $crate::Level::TRACE, { %$($k).+ $($field)* })
1250    );
1251    (name: $name:expr, target: $target:expr, $($arg:tt)+ ) => (
1252        $crate::event!(name: $name, target: $target, $crate::Level::TRACE, {}, $($arg)+)
1253    );
1254
1255    // Target / parent.
1256    (target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
1257        $crate::event!(target: $target, parent: $parent, $crate::Level::TRACE, { $($field)* }, $($arg)*)
1258    );
1259    (target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)* ) => (
1260        $crate::event!(target: $target, parent: $parent, $crate::Level::TRACE, { $($k).+ $($field)* })
1261    );
1262    (target: $target:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)* ) => (
1263        $crate::event!(target: $target, parent: $parent, $crate::Level::TRACE, { ?$($k).+ $($field)* })
1264    );
1265    (target: $target:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)* ) => (
1266        $crate::event!(target: $target, parent: $parent, $crate::Level::TRACE, { %$($k).+ $($field)* })
1267    );
1268    (target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
1269        $crate::event!(target: $target, parent: $parent, $crate::Level::TRACE, {}, $($arg)+)
1270    );
1271
1272    // Name / parent.
1273    (name: $name:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
1274        $crate::event!(name: $name, parent: $parent, $crate::Level::TRACE, { $($field)* }, $($arg)*)
1275    );
1276    (name: $name:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)* ) => (
1277        $crate::event!(name: $name, parent: $parent, $crate::Level::TRACE, { $($k).+ $($field)* })
1278    );
1279    (name: $name:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)* ) => (
1280        $crate::event!(name: $name, parent: $parent, $crate::Level::TRACE, { ?$($k).+ $($field)* })
1281    );
1282    (name: $name:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)* ) => (
1283        $crate::event!(name: $name, parent: $parent, $crate::Level::TRACE, { %$($k).+ $($field)* })
1284    );
1285    (name: $name:expr, parent: $parent:expr, $($arg:tt)+ ) => (
1286        $crate::event!(name: $name, parent: $parent, $crate::Level::TRACE, {}, $($arg)+)
1287    );
1288
1289    // Name.
1290    (name: $name:expr, { $($field:tt)* }, $($arg:tt)* ) => (
1291        $crate::event!(name: $name, $crate::Level::TRACE, { $($field)* }, $($arg)*)
1292    );
1293    (name: $name:expr, $($k:ident).+ $($field:tt)* ) => (
1294        $crate::event!(name: $name, $crate::Level::TRACE, { $($k).+ $($field)* })
1295    );
1296    (name: $name:expr, ?$($k:ident).+ $($field:tt)* ) => (
1297        $crate::event!(name: $name, $crate::Level::TRACE, { ?$($k).+ $($field)* })
1298    );
1299    (name: $name:expr, %$($k:ident).+ $($field:tt)* ) => (
1300        $crate::event!(name: $name, $crate::Level::TRACE, { %$($k).+ $($field)* })
1301    );
1302    (name: $name:expr, $($arg:tt)+ ) => (
1303        $crate::event!(name: $name, $crate::Level::TRACE, {}, $($arg)+)
1304    );
1305
1306    // Target.
1307    (target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
1308        $crate::event!(target: $target, $crate::Level::TRACE, { $($field)* }, $($arg)*)
1309    );
1310    (target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
1311        $crate::event!(target: $target, $crate::Level::TRACE, { $($k).+ $($field)* })
1312    );
1313    (target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
1314        $crate::event!(target: $target, $crate::Level::TRACE, { ?$($k).+ $($field)* })
1315    );
1316    (target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
1317        $crate::event!(target: $target, $crate::Level::TRACE, { %$($k).+ $($field)* })
1318    );
1319    (target: $target:expr, $($arg:tt)+ ) => (
1320        $crate::event!(target: $target, $crate::Level::TRACE, {}, $($arg)+)
1321    );
1322
1323    // Parent.
1324    (parent: $parent:expr, { $($field:tt)+ }, $($arg:tt)+ ) => (
1325        $crate::event!(
1326            target: module_path!(),
1327            parent: $parent,
1328            $crate::Level::TRACE,
1329            { $($field)+ },
1330            $($arg)+
1331        )
1332    );
1333    (parent: $parent:expr, $($k:ident).+ = $($field:tt)*) => (
1334        $crate::event!(
1335            target: module_path!(),
1336            parent: $parent,
1337            $crate::Level::TRACE,
1338            { $($k).+ = $($field)*}
1339        )
1340    );
1341    (parent: $parent:expr, ?$($k:ident).+ = $($field:tt)*) => (
1342        $crate::event!(
1343            target: module_path!(),
1344            parent: $parent,
1345            $crate::Level::TRACE,
1346            { ?$($k).+ = $($field)*}
1347        )
1348    );
1349    (parent: $parent:expr, %$($k:ident).+ = $($field:tt)*) => (
1350        $crate::event!(
1351            target: module_path!(),
1352            parent: $parent,
1353            $crate::Level::TRACE,
1354            { %$($k).+ = $($field)*}
1355        )
1356    );
1357    (parent: $parent:expr, $($k:ident).+, $($field:tt)*) => (
1358        $crate::event!(
1359            target: module_path!(),
1360            parent: $parent,
1361            $crate::Level::TRACE,
1362            { $($k).+, $($field)*}
1363        )
1364    );
1365    (parent: $parent:expr, ?$($k:ident).+, $($field:tt)*) => (
1366        $crate::event!(
1367            target: module_path!(),
1368            parent: $parent,
1369            $crate::Level::TRACE,
1370            { ?$($k).+, $($field)*}
1371        )
1372    );
1373    (parent: $parent:expr, %$($k:ident).+, $($field:tt)*) => (
1374        $crate::event!(
1375            target: module_path!(),
1376            parent: $parent,
1377            $crate::Level::TRACE,
1378            { %$($k).+, $($field)*}
1379        )
1380    );
1381    (parent: $parent:expr, $($arg:tt)+) => (
1382        $crate::event!(
1383            target: module_path!(),
1384            parent: $parent,
1385            $crate::Level::TRACE,
1386            {},
1387            $($arg)+
1388        )
1389    );
1390
1391    // ...
1392    ({ $($field:tt)+ }, $($arg:tt)+ ) => (
1393        $crate::event!(
1394            target: module_path!(),
1395            $crate::Level::TRACE,
1396            { $($field)+ },
1397            $($arg)+
1398        )
1399    );
1400    ($($k:ident).+ = $($field:tt)*) => (
1401        $crate::event!(
1402            target: module_path!(),
1403            $crate::Level::TRACE,
1404            { $($k).+ = $($field)*}
1405        )
1406    );
1407    (?$($k:ident).+ = $($field:tt)*) => (
1408        $crate::event!(
1409            target: module_path!(),
1410            $crate::Level::TRACE,
1411            { ?$($k).+ = $($field)*}
1412        )
1413    );
1414    (%$($k:ident).+ = $($field:tt)*) => (
1415        $crate::event!(
1416            target: module_path!(),
1417            $crate::Level::TRACE,
1418            { %$($k).+ = $($field)*}
1419        )
1420    );
1421    ($($k:ident).+, $($field:tt)*) => (
1422        $crate::event!(
1423            target: module_path!(),
1424            $crate::Level::TRACE,
1425            { $($k).+, $($field)*}
1426        )
1427    );
1428    (?$($k:ident).+, $($field:tt)*) => (
1429        $crate::event!(
1430            target: module_path!(),
1431            $crate::Level::TRACE,
1432            { ?$($k).+, $($field)*}
1433        )
1434    );
1435    (%$($k:ident).+, $($field:tt)*) => (
1436        $crate::event!(
1437            target: module_path!(),
1438            $crate::Level::TRACE,
1439            { %$($k).+, $($field)*}
1440        )
1441    );
1442    (?$($k:ident).+) => (
1443        $crate::event!(
1444            target: module_path!(),
1445            $crate::Level::TRACE,
1446            { ?$($k).+ }
1447        )
1448    );
1449    (%$($k:ident).+) => (
1450        $crate::event!(
1451            target: module_path!(),
1452            $crate::Level::TRACE,
1453            { %$($k).+ }
1454        )
1455    );
1456    ($($k:ident).+) => (
1457        $crate::event!(
1458            target: module_path!(),
1459            $crate::Level::TRACE,
1460            { $($k).+ }
1461        )
1462    );
1463    ($($arg:tt)+) => (
1464        $crate::event!(
1465            target: module_path!(),
1466            $crate::Level::TRACE,
1467            $($arg)+
1468        )
1469    );
1470}
1471
1472/// Constructs a span at the trace level.
1473#[macro_export]
1474macro_rules! trace_span {
1475    (target: $target:expr, parent: $parent:expr, $name:expr, $($field:tt)*) => {
1476        $crate::span!(
1477            target: $target,
1478            parent: $parent,
1479            $crate::Level::TRACE,
1480            $name,
1481            $($field)*
1482        )
1483    };
1484    (target: $target:expr, parent: $parent:expr, $name:expr) => {
1485        $crate::trace_span!(target: $target, parent: $parent, $name,)
1486    };
1487    (parent: $parent:expr, $name:expr, $($field:tt)*) => {
1488        $crate::span!(
1489            target: module_path!(),
1490            parent: $parent,
1491            $crate::Level::TRACE,
1492            $name,
1493            $($field)*
1494        )
1495    };
1496    (parent: $parent:expr, $name:expr) => {
1497        $crate::trace_span!(parent: $parent, $name,)
1498    };
1499    (target: $target:expr, $name:expr, $($field:tt)*) => {
1500        $crate::span!(
1501            target: $target,
1502            $crate::Level::TRACE,
1503            $name,
1504            $($field)*
1505        )
1506    };
1507    (target: $target:expr, $name:expr) => {
1508        $crate::trace_span!(target: $target, $name,)
1509    };
1510    ($name:expr, $($field:tt)*) => {
1511        $crate::span!(
1512            target: module_path!(),
1513            $crate::Level::TRACE,
1514            $name,
1515            $($field)*
1516        )
1517    };
1518    ($name:expr) => { $crate::trace_span!($name,) };
1519}
1520
1521/// Constructs a new `Event`.
1522#[macro_export]
1523macro_rules! event {
1524     // Name / target / parent.
1525    (name: $name:expr, target: $target:expr, parent: $parent:expr, $lvl:expr, { $($fields:tt)* } )=> ({
1526        $crate::__event_with_level!(level: $lvl, name: $name, target: $target, parent: $parent, $lvl, { $($fields)* })
1527    });
1528    (name: $name:expr, target: $target:expr, parent: $parent:expr, $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
1529        $crate::event!(
1530            name: $name,
1531            target: $target,
1532            parent: $parent,
1533            $lvl,
1534            { message = $crate::__macro_support::format_args!($($arg)+), $($fields)* }
1535        )
1536    );
1537    (name: $name:expr, target: $target:expr, parent: $parent:expr, $lvl:expr, $($k:ident).+ = $($fields:tt)* ) => (
1538        $crate::event!(name: $name, target: $target, parent: $parent, $lvl, { $($k).+ = $($fields)* })
1539    );
1540    (name: $name:expr, target: $target:expr, parent: $parent:expr, $lvl:expr, $($arg:tt)+) => (
1541        $crate::event!(name: $name, target: $target, parent: $parent, $lvl, { $($arg)+ })
1542    );
1543
1544    // Name / target.
1545    (name: $name:expr, target: $target:expr, $lvl:expr, { $($fields:tt)* } )=> ({
1546        $crate::__event_with_level!(level: $lvl, name: $name, target: $target, $lvl, { $($fields)* })
1547    });
1548    (name: $name:expr, target: $target:expr, $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
1549        $crate::event!(
1550            name: $name,
1551            target: $target,
1552            $lvl,
1553            { message = $crate::__macro_support::format_args!($($arg)+), $($fields)* }
1554        )
1555    );
1556    (name: $name:expr, target: $target:expr, $lvl:expr, $($k:ident).+ = $($fields:tt)* ) => (
1557        $crate::event!(name: $name, target: $target, $lvl, { $($k).+ = $($fields)* })
1558    );
1559    (name: $name:expr, target: $target:expr, $lvl:expr, $($arg:tt)+) => (
1560        $crate::event!(name: $name, target: $target, $lvl, { $($arg)+ })
1561    );
1562
1563    // Target / parent.
1564    (target: $target:expr, parent: $parent:expr, $lvl:expr, { $($fields:tt)* } )=> ({
1565        $crate::__event_with_level!(level: $lvl, target: $target, parent: $parent, $lvl, { $($fields)* })
1566    });
1567    (target: $target:expr, parent: $parent:expr, $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
1568        $crate::event!(
1569            target: $target,
1570            parent: $parent,
1571            $lvl,
1572            { message = $crate::__macro_support::format_args!($($arg)+), $($fields)* }
1573        )
1574    );
1575    (target: $target:expr, parent: $parent:expr, $lvl:expr, $($k:ident).+ = $($fields:tt)* ) => (
1576        $crate::event!(target: $target, parent: $parent, $lvl, { $($k).+ = $($fields)* })
1577    );
1578    (target: $target:expr, parent: $parent:expr, $lvl:expr, $($arg:tt)+) => (
1579        $crate::event!(target: $target, parent: $parent, $lvl, { $($arg)+ })
1580    );
1581
1582    // Name / parent.
1583    (name: $name:expr, parent: $parent:expr, $lvl:expr, { $($fields:tt)* } )=> ({
1584        $crate::__event_with_level!(level: $lvl, name: $name, parent: $parent, $lvl, { $($fields)* })
1585    });
1586    (name: $name:expr, parent: $parent:expr, $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
1587        $crate::event!(
1588            name: $name,
1589            parent: $parent,
1590            $lvl,
1591            { message = $crate::__macro_support::format_args!($($arg)+), $($fields)* }
1592        )
1593    );
1594    (name: $name:expr, parent: $parent:expr, $lvl:expr, $($k:ident).+ = $($fields:tt)* ) => (
1595        $crate::event!(name: $name, parent: $parent, $lvl, { $($k).+ = $($fields)* })
1596    );
1597    (name: $name:expr, parent: $parent:expr, $lvl:expr, $($arg:tt)+) => (
1598        $crate::event!(name: $name, parent: $parent, $lvl, { $($arg)+ })
1599    );
1600
1601    // Name.
1602    (name: $name:expr, $lvl:expr, { $($fields:tt)* } )=> ({
1603        $crate::__event_with_level!(level: $lvl, name: $name, $lvl, { $($fields)* })
1604    });
1605    (name: $name:expr, $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
1606        $crate::event!(
1607            name: $name,
1608            $lvl,
1609            { message = $crate::__macro_support::format_args!($($arg)+), $($fields)* }
1610        )
1611    );
1612    (name: $name:expr, $lvl:expr, $($k:ident).+ = $($fields:tt)* ) => (
1613        $crate::event!(name: $name, $lvl, { $($k).+ = $($fields)* })
1614    );
1615    (name: $name:expr, $lvl:expr, $($arg:tt)+ ) => (
1616        $crate::event!(name: $name, $lvl, { $($arg)+ })
1617    );
1618
1619    // Target.
1620    (target: $target:expr, $lvl:expr, { $($fields:tt)* } )=> ({
1621        $crate::__event_with_level!(level: $lvl, target: $target, $lvl, { $($fields)* })
1622    });
1623    (target: $target:expr, $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
1624        $crate::event!(
1625            target: $target,
1626            $lvl,
1627            { message = $crate::__macro_support::format_args!($($arg)+), $($fields)* }
1628        )
1629    );
1630    (target: $target:expr, $lvl:expr, $($k:ident).+ = $($fields:tt)* ) => (
1631        $crate::event!(target: $target, $lvl, { $($k).+ = $($fields)* })
1632    );
1633    (target: $target:expr, $lvl:expr, $($arg:tt)+ ) => (
1634        $crate::event!(target: $target, $lvl, { $($arg)+ })
1635    );
1636
1637    // Parent.
1638    (parent: $parent:expr, $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
1639        $crate::event!(
1640            target: module_path!(),
1641            parent: $parent,
1642            $lvl,
1643            { message = $crate::__macro_support::format_args!($($arg)+), $($fields)* }
1644        )
1645    );
1646    (parent: $parent:expr, $lvl:expr, $($k:ident).+ = $($field:tt)*) => (
1647        $crate::event!(
1648            target: module_path!(),
1649            parent: $parent,
1650            $lvl,
1651            { $($k).+ = $($field)*}
1652        )
1653    );
1654    (parent: $parent:expr, $lvl:expr, ?$($k:ident).+ = $($field:tt)*) => (
1655        $crate::event!(
1656            target: module_path!(),
1657            parent: $parent,
1658            $lvl,
1659            { ?$($k).+ = $($field)*}
1660        )
1661    );
1662    (parent: $parent:expr, $lvl:expr, %$($k:ident).+ = $($field:tt)*) => (
1663        $crate::event!(
1664            target: module_path!(),
1665            parent: $parent,
1666            $lvl,
1667            { %$($k).+ = $($field)*}
1668        )
1669    );
1670    (parent: $parent:expr, $lvl:expr, $($k:ident).+, $($field:tt)*) => (
1671        $crate::event!(
1672            target: module_path!(),
1673            parent: $parent,
1674            $lvl,
1675            { $($k).+, $($field)*}
1676        )
1677    );
1678    (parent: $parent:expr, $lvl:expr, %$($k:ident).+, $($field:tt)*) => (
1679        $crate::event!(
1680            target: module_path!(),
1681            parent: $parent,
1682            $lvl,
1683            { %$($k).+, $($field)*}
1684        )
1685    );
1686    (parent: $parent:expr, $lvl:expr, ?$($k:ident).+, $($field:tt)*) => (
1687        $crate::event!(
1688            target: module_path!(),
1689            parent: $parent,
1690            $lvl,
1691            { ?$($k).+, $($field)*}
1692        )
1693    );
1694    (parent: $parent:expr, $lvl:expr, $($arg:tt)+ ) => (
1695        $crate::event!(target: module_path!(), parent: $parent, $lvl, { $($arg)+ })
1696    );
1697
1698    // ...
1699    ( $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
1700        $crate::event!(
1701            target: module_path!(),
1702            $lvl,
1703            { message = $crate::__macro_support::format_args!($($arg)+), $($fields)* }
1704        )
1705    );
1706    ( $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
1707        $crate::event!(
1708            target: module_path!(),
1709            $lvl,
1710            { message = format_args!($($arg)+), $($fields)* }
1711        )
1712    );
1713    ($lvl:expr, $($k:ident).+ = $($field:tt)*) => (
1714        $crate::event!(
1715            target: module_path!(),
1716            $lvl,
1717            { $($k).+ = $($field)*}
1718        )
1719    );
1720    ($lvl:expr, $($k:ident).+, $($field:tt)*) => (
1721        $crate::event!(
1722            target: module_path!(),
1723            $lvl,
1724            { $($k).+, $($field)*}
1725        )
1726    );
1727    ($lvl:expr, ?$($k:ident).+, $($field:tt)*) => (
1728        $crate::event!(
1729            target: module_path!(),
1730            $lvl,
1731            { ?$($k).+, $($field)*}
1732        )
1733    );
1734    ($lvl:expr, %$($k:ident).+, $($field:tt)*) => (
1735        $crate::event!(
1736            target: module_path!(),
1737            $lvl,
1738            { %$($k).+, $($field)*}
1739        )
1740    );
1741    ($lvl:expr, ?$($k:ident).+) => (
1742        $crate::event!($lvl, ?$($k).+,)
1743    );
1744    ($lvl:expr, %$($k:ident).+) => (
1745        $crate::event!($lvl, %$($k).+,)
1746    );
1747    ($lvl:expr, $($k:ident).+) => (
1748        $crate::event!($lvl, $($k).+,)
1749    );
1750    ( $lvl:expr, $($arg:tt)+ ) => (
1751        $crate::event!(target: module_path!(), $lvl, { $($arg)+ })
1752    );
1753}
1754
1755/// Constructs a new span.
1756#[macro_export]
1757macro_rules! span {
1758    (target: $target:expr, parent: $parent:expr, $lvl:expr, $name:expr) => {
1759        $crate::span!(target: $target, parent: $parent, $lvl, $name,)
1760    };
1761    (target: $target:expr, parent: $parent:expr, $lvl:expr, $name:expr, $($fields:tt)*) => {
1762        $crate::__span_with_level!(level: $lvl, target: $target, parent: $parent, $lvl, $name, $($fields)*)
1763    };
1764    (target: $target:expr, $lvl:expr, $name:expr, $($fields:tt)*) => {
1765        $crate::__span_with_level!(level: $lvl, target: $target, $lvl, $name, $($fields)*)
1766    };
1767    (target: $target:expr, parent: $parent:expr, $lvl:expr, $name:expr) => {
1768        $crate::span!(target: $target, parent: $parent, $lvl, $name,)
1769    };
1770    (parent: $parent:expr, $lvl:expr, $name:expr, $($fields:tt)*) => {
1771        $crate::span!(
1772            target: module_path!(),
1773            parent: $parent,
1774            $lvl,
1775            $name,
1776            $($fields)*
1777        )
1778    };
1779    (parent: $parent:expr, $lvl:expr, $name:expr) => {
1780        $crate::span!(
1781            target: module_path!(),
1782            parent: $parent,
1783            $lvl,
1784            $name,
1785        )
1786    };
1787    (target: $target:expr, $lvl:expr, $name:expr, $($fields:tt)*) => {
1788        $crate::span!(
1789            target: $target,
1790            $lvl,
1791            $name,
1792            $($fields)*
1793        )
1794    };
1795    (target: $target:expr, $lvl:expr, $name:expr) => {
1796        $crate::span!(target: $target, $lvl, $name,)
1797    };
1798    ($lvl:expr, $name:expr, $($fields:tt)*) => {
1799        $crate::span!(
1800            target: module_path!(),
1801            $lvl,
1802            $name,
1803            $($fields)*
1804        )
1805    };
1806    ($lvl:expr, $name:expr) => {
1807        $crate::span!(
1808            target: module_path!(),
1809            $lvl,
1810            $name,
1811        )
1812    };
1813}
1814
1815#[doc(hidden)]
1816#[macro_export]
1817macro_rules! __event_with_level {
1818    (level: $lvl:expr, $($arg:tt)*) => {{
1819        let emit = {
1820            #[cold] #[inline(never)] || { $crate::__macro_support::tracing::event!($($arg)*) }
1821        };
1822
1823        if $crate::__macro_support::tracing::enabled!($lvl) {
1824            emit();
1825        }
1826    }};
1827}
1828
1829#[doc(hidden)]
1830#[macro_export]
1831macro_rules! __span_with_level {
1832    (level: $lvl:expr, $($arg:tt)*) => {{
1833        let emit = {
1834            #[cold] #[inline(never)] || { $crate::__macro_support::tracing::span!($($arg)*) }
1835        };
1836
1837        if $crate::__macro_support::tracing::enabled!($lvl) {
1838            emit()
1839        } else {
1840            $crate::__macro_support::tracing::Span::none()
1841        }
1842    }};
1843}
1844
1845#[doc(hidden)]
1846pub mod __macro_support {
1847    pub use core::format_args;
1848    pub use tracing;
1849}