Как я могу путь аргументов от функции к макросу - PullRequest
0 голосов
/ 12 октября 2018

Объясните, у меня есть макроинформация! ("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")
}

1 Ответ

0 голосов
/ 12 октября 2018

Решение:

use logger_util;  

fn foo() {
    logger_util::use_macro(format_args!("{} {} ", 123, "hello world"))
}

use std::fmt::Arguments;    

pub fn use_macro(args: Arguments) {
    info!("{}", args)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...