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

Мне интересно использовать wasm-bindgen через rust-webpack-template для компиляции кода Rust в WebAssembly. Тем не менее, я бы не хотел напрямую оборачивать свой код макросом атрибута #[wasm_bindgen], чтобы можно было отделить логику функции от сгенерированного интерфейса WebAssembly для лучшей организации моего проекта. Вместо этого я бы предпочел, чтобы генерация привязки была в отдельном файле, например:

mod my_code;
use my_code::my_function;

#[wasm_bindgen]
my_function; // I want to do something like this!

Я понимаю, что #[wasm_bindgen] - это атрибут макроса, который действует на AST определения функции, которое обычно следует, но есть ли подход для применения этого макроса к коду, определенному в другом месте?

1 Ответ

0 голосов
/ 27 ноября 2018

Насколько я знаю, нет способа сделать это.Макросы работают с AST кода, к которому они прикреплены, и здесь нет кода, который нужно присоединить.

Если вам это действительно нужно, вам придется скопировать и вставить подпись своей функции.:

mod my_code {
    pub fn my_function(_: i32) -> String {
        unimplemented!()
    }
}

#[wasm_bindgen]
fn my_function(a: i32) -> String {
    my_code::my_function(a)
}

Возможно, вы могли бы написать макрос, чтобы сделать обтекание немного менее утомительным, но вам все равно придется реплицировать имя функции, типы аргументов и тип возвращаемого значения.

...