Trame2771
@Trame2771

Почему атрубут из extern prelude не работает при re-export-е в модуль?

pub use ::wasm_bindgen::prelude::wasm_bindgen as wb;

pub mod js_api {
    // Попытки внесения всевозможных trait в scope (никак не помогло)
    pub use ::wasm_bindgen;
    pub use ::wasm_bindgen::*;
    pub use ::wasm_bindgen::prelude;
    pub use ::wasm_bindgen::prelude::*;
    
    /* не работает
    #[crate::wb]
    extern {
        #[crate::wb(js_namespace = console, js_name = log)]
        pub fn wb_log(s: &str);
    }
    */
    
    // Почему-то так работает
    #[::wasm_bindgen::prelude::wasm_bindgen]
    extern {
        #[::wasm_bindgen::prelude::wasm_bindgen(js_namespace = console, js_name = log)]
        pub fn wb_log(s: &str);
    }

    pub struct Console {}
    
    impl Console {
        pub fn log(&self, s: &str) {
            wb_log(s);
        }
    }
}

#[wb(start)]
pub fn js_main() {
    let someOutput: &str = "abc";
    let console = js_api::Console{};
    console.log(someOutput);
}


Компилировать нужно c флагом
--target wasm32-unknown-unknown
И в Cargo.toml прописать
wasm-bindgen = "0.2"
и
[lib]
crate-type = ["cdylib"]
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
Trame2771
@Trame2771 Автор вопроса
Я кажеться понял. Это вопрос больше не к языку, а к либе. По сообщаемой компилятором ошибке мне кажеться, что атрибут не из модуля с целевым типом каким-то образом видит этот тип с префиксом пути к типу и его алгоритм парсинга ломается. Он считает часть описания типа, которая относиться к пути до него, частью самого типа и не может сапоставить такой тип с указанными атомарными у себя
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы