wind_core/
log.rs

1pub use const_str::concat;
2pub use tracing;
3
4#[macro_export]
5macro_rules! info {
6    (target: $target:expr, $($arg:tt)*) => {
7
8		$crate::log::tracing::info!(target: $crate::log::concat!($crate::extract_crate_name!(), " ", $target), $($arg)*)
9    };
10    (name: $name:expr, target: $target:expr, $($arg:tt)*) => {
11
12		$crate::log::tracing::info!(
13            name: $name,
14            target: $crate::log::concat!($crate::extract_crate_name!(), " ", $target),
15            $($arg)*
16        )
17    };
18    ($($arg:tt)*) => {
19		$crate::log::tracing::info!($($arg)*)
20    };
21}
22
23#[macro_export]
24macro_rules! warn {
25    (target: $target:expr, $($arg:tt)*) => {
26
27		$crate::log::tracing::warn!(target: $crate::log::concat!($crate::extract_crate_name!(), " ", $target), $($arg)*)
28    };
29    (name: $name:expr, target: $target:expr, $($arg:tt)*) => {
30
31		$crate::log::tracing::warn!(
32            name: $name,
33            target: $crate::log::concat!($crate::extract_crate_name!(), " ", $target),
34            $($arg)*
35        )
36    };
37    ($($arg:tt)*) => {
38		$crate::log::tracing::warn!($($arg)*)
39    };
40}
41
42#[macro_export]
43macro_rules! error {
44    (target: $target:expr, $($arg:tt)*) => {
45
46		$crate::log::tracing::error!(target: $crate::log::concat!($crate::extract_crate_name!(), " ", $target), $($arg)*)
47    };
48    (name: $name:expr, target: $target:expr, $($arg:tt)*) => {
49
50		$crate::log::tracing::error!(
51            name: $name,
52            target: $crate::log::concat!($crate::extract_crate_name!(), " ", $target),
53            $($arg)*
54        )
55    };
56    ($($arg:tt)*) => {
57		$crate::log::tracing::error!($($arg)*)
58    };
59}
60
61/// https://github.com/Gadiguibou/current_crate_name/blob/master/src/lib.rs
62#[macro_export]
63macro_rules! extract_crate_name {
64	() => {{
65		const MODULE_PATH_SEPARATOR: u8 = b':';
66		const MODULE_PATH_BYTE_SLICE: &[u8] = module_path!().as_bytes();
67		const MODULE_PATH_SEPARATOR_INDEX: usize = {
68			let mut index = 0;
69			loop {
70				if index == MODULE_PATH_BYTE_SLICE.len() || MODULE_PATH_BYTE_SLICE[index] == MODULE_PATH_SEPARATOR {
71					break index;
72				}
73				index += 1;
74			}
75		};
76		const NEW_SLICE: [u8; MODULE_PATH_SEPARATOR_INDEX] = {
77			let mut arr = [0; MODULE_PATH_SEPARATOR_INDEX];
78			let mut i = 0;
79			while i < MODULE_PATH_SEPARATOR_INDEX {
80				arr[i] = MODULE_PATH_BYTE_SLICE[i];
81				i += 1;
82			}
83			arr
84		};
85
86		// SAFETY: The original string was valid UTF-8 and we sliced it at the start of
87		// an ASCII byte which is a valid unicode boundary. Hence the new string is
88		// still valid UTF-8.
89		unsafe { std::str::from_utf8_unchecked(&NEW_SLICE) }
90	}};
91}