1#[doc(hidden)]
2#[macro_export]
3macro_rules! do_log_filter {
4 (target: $target:expr, $log_filter:expr, $lvl:expr, $($arg:tt)+) => ({
5 let lvl = $lvl;
6 if lvl <= log::STATIC_MAX_LEVEL && lvl as usize <= $log_filter.get_level() && lvl <= log::max_level() {
7 $log_filter._private_api_log(
8 std::format_args!($($arg)+),
9 lvl,
10 &($target, std::module_path!(), std::file!(), std::line!()),
11 );
12 }
13 });
14 ($log_filter:expr, $lvl:expr, $($arg:tt)+) => (do_log_filter!(target: std::module_path!(), $log_filter, $lvl, $($arg)+))
15}
16#[allow(unused_imports)]
17pub(super) use do_log_filter;
18
19#[macro_export]
22macro_rules! logger_error {
23 ($log_filter:expr, $($arg:tt)+) => (
24 do_log_filter!($log_filter, log::Level::Error, $($arg)+);
25 )
26}
27#[allow(unused_imports)]
28pub(super) use logger_error;
29
30#[macro_export]
33macro_rules! logger_warn {
34 ($log_filter:expr, $($arg:tt)+) => (
35 do_log_filter!($log_filter, log::Level::Warn, $($arg)+);
36 )
37}
38#[allow(unused_imports)]
39pub(super) use logger_warn;
40
41#[macro_export]
44macro_rules! logger_info {
45 ($log_filter:expr, $($arg:tt)+) => (
46 do_log_filter!($log_filter, log::Level::Info, $($arg)+);
47 )
48}
49#[allow(unused_imports)]
50pub(super) use logger_info;
51
52#[macro_export]
55macro_rules! logger_debug {
56 ($log_filter:expr, $($arg:tt)+) => (
57 do_log_filter!($log_filter, log::Level::Debug, $($arg)+);
58 )
59}
60#[allow(unused_imports)]
61pub(super) use logger_debug;
62
63#[macro_export]
66macro_rules! logger_trace {
67 ($log_filter:expr, $($arg:tt)+) => (
68 do_log_filter!($log_filter, log::Level::Trace, $($arg)+);
69 )
70}
71#[allow(unused_imports)]
72pub(super) use logger_trace;
73
74#[macro_export]
89macro_rules! logger_debug_assert {
90 ($log_filter:expr, $($arg:tt)*) => (if std::cfg!(debug_assertions) { $crate::logger_assert!($log_filter, $($arg)*); });
91}
92#[allow(unused_imports)]
93pub(super) use logger_debug_assert;
94
95#[macro_export]
109macro_rules! logger_debug_assert_eq {
110 ($log_filter:expr, $($arg:tt)*) => (if std::cfg!(debug_assertions) { $crate::logger_assert_eq!($log_filter, $($arg)*); })
111}
112#[allow(unused_imports)]
113pub(super) use logger_debug_assert_eq;
114
115#[macro_export]
129macro_rules! logger_assert {
130 ($log_filter:expr, $cond:expr) => ({
131 if !$cond {
132 do_log_filter!(
133 $log_filter,
134 log::Level::Error,
135 "assertion failed: {:?}",
136 $cond
137 );
138 std::panic!(r#"assertion failed: {:?}"#, $cond);
139 }
140 });
141 ($log_filter:expr, $cond:expr,) => ({
142 $crate::logger_assert!($log_filter, $cond);
143 });
144 ($log_filter:expr, $cond:expr, $($arg:tt)+) => ({
145 if !$cond {
146 do_log_filter!(
147 $log_filter,
148 log::Level::Error,
149 "assertion failed: {}",
150 std::format_args!($($arg)+)
151 );
152 std::panic!(r#"{}"#, std::format_args!($($arg)+));
153 }
154 });
155}
156#[allow(unused_imports)]
157pub(super) use logger_assert;
158
159#[macro_export]
172macro_rules! logger_assert_eq {
173 ($log_filter:expr, $left:expr, $right:expr) => ({
174 match (&$left, &$right) {
175 (left_val, right_val) => {
176 if !(*left_val == *right_val) {
177 do_log_filter!($log_filter, log::Level::Error, "assertion failed! \
178 expected: (`left == right`) actual: (`{:?}` != `{:?}`)", &*left_val, &*right_val);
179 std::panic!(r#"assertion failed: `(left == right)`
180 left: `{:?}`,
181 right: `{:?}`"#, &*left_val, &*right_val);
182 }
183 }
184 }
185 });
186 ($log_filter:expr, $left:expr, $right:expr,) => ({
187 $crate::logger_assert_eq!($log_filter, $left, $right);
188 });
189 ($log_filter:expr, $left:expr, $right:expr, $($arg:tt)+) => ({
190 match (&($left), &($right)) {
191 (left_val, right_val) => {
192 if !(*left_val == *right_val) {
193 do_log_filter!($log_filter, log::Level::Error, "assertion failed! \
194 expected: `(left == right)` actual: (`{:?}` != `{:?}`)", &*left_val, &*right_val);
195 std::panic!(r#"assertion failed: `(left == right)`
196 left: `{:?}`,
197 right: `{:?}`: {}"#, &*left_val, &*right_val,
198 std::format_args!($($arg)+));
199 }
200 }
201 }
202 });
203}
204#[allow(unused_imports)]
205pub(super) use logger_assert_eq;
206
207#[macro_export]
221macro_rules! log_debug_assert {
222 ($($arg:tt)*) => (if std::cfg!(debug_assertions) { $crate::log_assert!($($arg)*); });
223}
224#[allow(unused_imports)]
225pub(super) use log_debug_assert;
226
227#[macro_export]
240macro_rules! log_debug_assert_eq {
241 ($($arg:tt)*) => (if std::cfg!(debug_assertions) { $crate::log_assert_eq!($($arg)*); })
242}
243#[allow(unused_imports)]
244pub(super) use log_debug_assert_eq;
245
246#[macro_export]
259macro_rules! log_assert {
260 ($cond:expr) => ({
261 if !$cond {
262 log::error!(
263 "assertion failed: {:?}",
264 $cond
265 );
266 std::panic!(r#"assertion failed: {:?}"#, $cond);
267 }
268 });
269 ($cond:expr,) => ({
270 $crate::log_assert!($log_filter, $cond);
271 });
272 ($cond:expr, $($arg:tt)+) => ({
273 if !$cond {
274 log::error!(
275 "assertion failed: {}",
276 std::format_args!($($arg)+)
277 );
278 std::panic!(r#"{}"#, std::format_args!($($arg)+));
279 }
280 });
281}
282#[allow(unused_imports)]
283pub(super) use log_assert;
284
285#[macro_export]
297macro_rules! log_assert_eq {
298 ($left:expr, $right:expr) => ({
299 match (&$left, &$right) {
300 (left_val, right_val) => {
301 if !(*left_val == *right_val) {
302 log::error!("assertion failed! \
303 expected: (`left == right`) actual: (`{:?}` != `{:?}`)", &*left_val, &*right_val);
304 std::panic!(r#"assertion failed: `(left == right)`
305 left: `{:?}`,
306 right: `{:?}`"#, &*left_val, &*right_val);
307 }
308 }
309 }
310 });
311 ($left:expr, $right:expr,) => ({
312 $crate::log_assert_eq!($left, $right);
313 });
314 ($left:expr, $right:expr, $($arg:tt)+) => ({
315 match (&($left), &($right)) {
316 (left_val, right_val) => {
317 if !(*left_val == *right_val) {
318 log::error!( "assertion failed! \
319 expected: `(left == right)` actual: (`{:?}` != `{:?}`)", &*left_val, &*right_val);
320 std::panic!(r#"assertion failed: `(left == right)`
321 left: `{:?}`,
322 right: `{:?}`: {}"#, &*left_val, &*right_val,
323 std::format_args!($($arg)+));
324 }
325 }
326 }
327 });
328}
329
330#[allow(unused_imports)]
331pub(super) use log_assert_eq;
332
333#[macro_export]
337macro_rules! log_println {
338 ($($arg:tt)+) => {
339 std::println!($($arg)+);
340 log::info!($($arg)+);
341 }
342}
343#[allow(unused_imports)]
344pub(super) use log_println;
345
346#[macro_export]
350macro_rules! log_eprintln {
351 ($($arg:tt)+) => {
352 std::eprintln!($($arg)+);
353 log::info!($($arg)+);
354 }
355}
356#[allow(unused_imports)]
357pub(super) use log_eprintln;