Как применить атрибут макроса к функции, определенной в отдельном модуле?
Я заинтересован в использовании 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 ответ
Насколько я знаю, это невозможно сделать. Макросы работают с AST кода, к которому они прикреплены, и здесь нет кода, который можно прикрепить.
Если вам это действительно нужно, вам придется скопировать и вставить подпись вашей функции:
mod my_code {
pub fn my_function(_: i32) -> String {
unimplemented!()
}
}
#[wasm_bindgen]
fn my_function(a: i32) -> String {
my_code::my_function(a)
}
Возможно, вы могли бы написать макрос, чтобы сделать перенос немного менее утомительным, но вам все равно нужно будет повторить имя функции, типы аргументов и тип возвращаемого значения.