Clone in a terminal:
Commit e8e5dd2
Johan Mattsson - 2026-06-01T18:15:26+00:00
e8e5dd2939f923ae6cd9aca99ac92728a40c2fc3johan.mattsson.m@gmail.com

Adding a comment for clarity Macros can be hard to read.

Changed files (1)

Diff

diff --git a/src/lib.rs b/src/lib.rsindex 1d1186e..8cfc198 100644--- a/src/lib.rs+++ b/src/lib.rs@@ -73,6 +73,31 @@ pub fn callback(attr: TokenStream, item: TokenStream) -> TokenStream {     TokenStream::from(expanded) } +// The closure will look like this:+/*+    let callback_js_closure = Closure::<dyn FnMut(wasm_bindgen::JsValue, wasm_bindgen::JsValue)>::new(|val, val2| {+        let event: SomeStruct =+            serde_wasm_bindgen::from_value(val);++        if event.is_err() {+            gloo::console::log!("Callback error: {}. Wrong argument type: {}", fn_name, event.err().unwrap());+            return;+        }++        let event2: u32 =+            serde_wasm_bindgen::from_value(val2);++        if event2.is_err() {+            gloo::console::log!("Callback error: {}. Wrong argument type: {}", fn_name, event2.err().unwrap());+            return;+        }++        let event = event.unwrap();+        let event2 = event.unwrap();++        the_rust_callback_function(event, event2);+    });+*/ fn generate_callback_closure(     fn_name: &Ident,     inputs: syn::punctuated::Punctuated<FnArg, syn::token::Comma>,@@ -109,14 +134,12 @@ fn generate_callback_closure(         }     } -    //if inputs.len() == 3 {     let mut conversions = Vec::new();     for ((res_ident, rs_ident), (val_ident, ty)) in temp_result_idents         .iter()         .zip(rs_arg_idents.iter())         .zip(js_arg_idents.iter().zip(rust_arg_types.iter()))     {-        // always use serde_wasm_bindgen::from_value for all types         let conv = quote! {             let #res_ident = serde_wasm_bindgen::from_value::<#ty>(#val_ident.clone());             if #res_ident.is_err() {@@ -132,7 +155,6 @@ fn generate_callback_closure(         conversions.push(conv);     } -    // build a token-list of wasm_bindgen::JsValue types for the trait object     let js_types: Vec<proc_macro2::TokenStream> = (0..js_arg_idents.len())         .map(|_| quote! { wasm_bindgen::JsValue })         .collect();@@ -152,7 +174,7 @@ struct CallbackArg {     span: proc_macro2::Span, } -// remoce quote if present+// remove quote if present impl syn::parse::Parse for CallbackArg {     fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {         if input.peek(LitStr) {

Contact

Email: johan.mattsson.m@gmail.com
Mastodon: typo.social/@birdfont
GitHub: johanmattssonm
LinkedIn: johan-mattsson-2ab324112