| #![doc(html_root_url = "https://docs.rs/wasm-bindgen-macro/0.2")] |
| |
| extern crate proc_macro; |
| |
| use proc_macro::TokenStream; |
| use quote::quote; |
| |
| #[proc_macro_attribute] |
| pub fn wasm_bindgen(attr: TokenStream, input: TokenStream) -> TokenStream { |
| match wasm_bindgen_macro_support::expand(attr.into(), input.into()) { |
| Ok(tokens) => { |
| if cfg!(feature = "xxx_debug_only_print_generated_code") { |
| println!("{}", tokens); |
| } |
| tokens.into() |
| } |
| Err(diagnostic) => (quote! { #diagnostic }).into(), |
| } |
| } |
| |
| /// This macro takes a JS module as input and returns a URL that can be used to |
| /// access it at runtime. |
| /// |
| /// The module can be specified in a few ways: |
| /// - You can use `inline_js = "..."` to create an inline JS file. |
| /// - You can use `module = "/foo/bar"` to reference a file relative to the |
| /// root of the crate the macro is invoked in. |
| /// |
| /// The returned URL can be used for things like creating workers/worklets: |
| /// ```no_run |
| /// use web_sys::Worker; |
| /// let worker = Worker::new(&wasm_bindgen::link_to!(module = "/src/worker.js")); |
| /// ``` |
| #[proc_macro] |
| pub fn link_to(input: TokenStream) -> TokenStream { |
| match wasm_bindgen_macro_support::expand_link_to(input.into()) { |
| Ok(tokens) => { |
| if cfg!(feature = "xxx_debug_only_print_generated_code") { |
| println!("{}", tokens); |
| } |
| tokens.into() |
| } |
| // This `String::clone` is here so that IDEs know this is supposed to be a |
| // `String` and can keep type-checking the rest of the program even if the macro |
| // fails. |
| Err(diagnostic) => (quote! { String::clone(#diagnostic) }).into(), |
| } |
| } |
| |
| #[proc_macro_attribute] |
| pub fn __wasm_bindgen_class_marker(attr: TokenStream, input: TokenStream) -> TokenStream { |
| match wasm_bindgen_macro_support::expand_class_marker(attr.into(), input.into()) { |
| Ok(tokens) => { |
| if cfg!(feature = "xxx_debug_only_print_generated_code") { |
| println!("{}", tokens); |
| } |
| tokens.into() |
| } |
| Err(diagnostic) => (quote! { #diagnostic }).into(), |
| } |
| } |