Макрос module_path!
Макрос module_path! возвращает строковый литерал,
содержащий полный путь к модулю, в котором он был вызван.
Путь формируется во время компиляции и включает имя крейта
и все вложенные модули, разделённые двойным двоеточием.
Макрос не принимает параметров и раскрывается в значение
типа &'static str.
Этот макрос удобно использовать для логирования, отладки и построения диагностических сообщений, когда важно знать, из какого именно модуля пришёл вызов.
Синтаксис
module_path!()
Пример
Давайте вызовем макрос module_path! в функции
main и выведем полученный путь на экран:
fn main()
{
let res = module_path!();
println!("{}", res);
}
Результат выполнения кода:
"crate_name"
Пример
Давайте создадим вложенный модуль inner и вызовем
макрос module_path! внутри него:
mod inner
{
pub fn get_path() -> &'static str
{
module_path!()
}
}
fn main()
{
let res = inner::get_path();
println!("{}", res);
}
Результат выполнения кода:
"crate_name::inner"
Пример
Давайте используем макрос module_path! вместе
с макросом concat!, чтобы построить строку
с указанием места вызова:
fn log(message: &str)
{
let prefix = concat!("[", module_path!(), "] ");
println!("{}{}", prefix, message);
}
fn main()
{
log("hello");
}
Результат выполнения кода:
"[crate_name] hello"