Объясните, у меня есть макроинформация! ("Hello world") из Журнал ржавчины И он хорошо работает где угодно, но не в файле common.rs из Организация теста ржавчины для грузаинтеграционный тест.Из-за использования макроса объявление (для импорта) должно быть объявлено в корневом модуле, а затем предусматривает дочерние модули.Но в случае интеграционного теста у нас нет корневого модуля и мы не можем предоставить макрос для common.rs (дочерний модуль).
Пример 1: родительский модуль mod.rs
#[macro_use]
use extern crate some_crate;
mod child.
, в этом случае дочерний элемент может использовать макрос без проблем
Пример 2: Нет модуля (в качестве интеграционного теста), просто протестируйте файл some_test.rs
#[macro_use]
use extern crate some_crate;
mod child.
, в этом случае дочерний элемент не видит макрос, и мы можем обеспечить использование макросов только таким способом.
Для решения этой проблемы я создаювспомогательный модуль logger_util, который может использовать макрос и затем импортироваться в some_test.rs
Пример 3: Нет модуля (в качестве интеграционного тестового примера), просто тестовый файл some_test.rs
mod child
child.rs
use logger_util
fn foo() {
logger_util.use_macro()
}
logger_util.rs
#[macro_use]
extern crate some_crate;
pub fn use_macro() {
some_macro!("Hello world")
}
И мой вопрос следующий: как я могу вместо этого:
fn foo() {
info!("{} {} ", 123, "hello world")
}
Сделать это из:
fn foo() {
let print_data: SomeType = "{} {} ", 123, "hello world";
use_macro(print_data)
}
To logger_util.rs
pub fn use_macro(print_data: SomeType) {
info!("Hello world")
}