1#[doc(hidden)]
2pub use scopeguard::guard;
3
4#[macro_export]
23macro_rules! trace_begin {
24 ($name: expr) => {
25 if $crate::is_enabled() {
26 let event = $crate::Event {
27 name: $name.into(),
28 kind: $crate::EventKind::SyncBegin,
29 metadata: $crate::Metadata::default(),
30 };
31 $crate::record_event(event);
32 }
33 };
34
35 ($name: expr, $($metadata: tt)+) => {
36 if $crate::is_enabled() {
37 let metadata = if $crate::supports_metadata() {
38 $crate::Metadata::from_json(serde_json::json!({$($metadata)+}))
39 } else {
40 $crate::Metadata::default()
41 };
42
43 let event = $crate::Event {
44 name: $name.into(),
45 kind: $crate::EventKind::SyncBegin,
46 metadata,
47 };
48 $crate::record_event(event);
49 }
50 };
51}
52
53#[macro_export]
72macro_rules! trace_end {
73 ($name: expr) => {
74 if $crate::is_enabled() {
75 let event = $crate::Event {
76 name: $name.into(),
77 kind: $crate::EventKind::SyncEnd,
78 metadata: $crate::Metadata::default(),
79 };
80 $crate::record_event(event);
81 }
82 };
83
84 ($name: expr, $($metadata: tt)+) => {
85 if $crate::is_enabled() {
86 let metadata = if $crate::supports_metadata() {
87 $crate::Metadata::from_json(serde_json::json!({$($metadata)+}))
88 } else {
89 $crate::Metadata::default()
90 };
91
92 let event = $crate::Event {
93 name: $name.into(),
94 kind: $crate::EventKind::SyncEnd,
95 metadata,
96 };
97 $crate::record_event(event);
98 }
99 };
100}
101
102#[macro_export]
107macro_rules! trace_scoped {
108 ($name: expr) => {
109 let guard = if $crate::is_enabled() {
110 let name: std::borrow::Cow<str> = $name.into();
111 $crate::trace_begin!(name.clone());
112 Some($crate::guard(name, move |name| {
113 $crate::trace_end!(name);
114 }))
115 } else {
116 None
117 };
118 };
119
120 ($name: expr, $($metadata: tt)+) => {
121 let guard = if $crate::is_enabled() {
122 let name: std::borrow::Cow<str> = $name.into();
123 let metadata = if $crate::supports_metadata() {
124 $crate::Metadata::from_json(serde_json::json!({$($metadata)+}))
125 } else {
126 $crate::Metadata::default()
127 };
128 $crate::trace_begin!(name.clone(), metadata);
129 Some($crate::guard(name, move |name| {
130 $crate::trace_end!(name);
131 }))
132 } else {
133 None
134 };
135 };
136}