Clone in a terminal:
Commit 59d9c33
Johan Mattsson - 2026-05-31T23:25:09+00:00
59d9c33e9307c64cd50b6782ea8efc079460146bjohan.mattsson.m@gmail.com

Drop quotes

Changed files (1)

Diff

diff --git a/src/lib.rs b/src/lib.rsindex 88fd924..f192f38 100644--- a/src/lib.rs+++ b/src/lib.rs@@ -7,7 +7,7 @@ use syn::{parse_macro_input, ItemFn, LitStr}; /// /// Example usage: /// ```-/// #[derive(Debug, serde::Deserialize)]+/// #[derive(serde::Deserialize)] /// struct SomeClickEvent { ///     índex: usize, /// }@@ -26,9 +26,37 @@ use syn::{parse_macro_input, ItemFn, LitStr}; /// ``` #[proc_macro_attribute] pub fn callback(attr: TokenStream, item: TokenStream) -> TokenStream {-    let js_name_lit = parse_macro_input!(attr as LitStr);+    // parse attribute as either a string literal `"name"` or an identifier `name`+    struct CallbackArg {+        name: String,+        span: proc_macro2::Span,+    }++    impl syn::parse::Parse for CallbackArg {+        fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {+            if input.peek(LitStr) {+                let s: LitStr = input.parse()?;+                Ok(CallbackArg {+                    name: s.value(),+                    span: s.span(),+                })+            } else if input.peek(syn::Ident) {+                let id: syn::Ident = input.parse()?;+                Ok(CallbackArg {+                    name: id.to_string(),+                    span: id.span(),+                })+            } else {+                Err(input.error("expected string literal or identifier, e.g. #[callback(\"name\")] or #[callback(name)]"))+            }+        }+    }++    let callback_arg = parse_macro_input!(attr as CallbackArg);+    let js_name_lit = LitStr::new(&callback_arg.name, callback_arg.span);     let input_fn = parse_macro_input!(item as ItemFn);     let fn_name = &input_fn.sig.ident;+    let fn_name_lit = LitStr::new(&fn_name.to_string(), fn_name.span());     let vis = &input_fn.vis;     let sig = &input_fn.sig;     let fn_block = &input_fn.block;

Contact

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