Skip to main content

workflow_wasm_macros/
lib.rs

1//! Procedural macros supporting the `workflow-wasm` crate, providing the
2//! [`callback`] function-like macro for constructing JavaScript callbacks and
3//! the [`CastFromJs`](derive_cast_from_js) derive for casting from JS values.
4
5use proc_macro::TokenStream;
6use proc_macro_error3::proc_macro_error;
7use quote::ToTokens;
8use syn::parse_macro_input;
9mod callback;
10use callback::Callback;
11mod derive_cast_from_js;
12
13/// Constructs a `workflow_wasm::callback::Callback` from a closure (or
14/// expression), selecting the appropriate constructor based on the number of
15/// closure arguments so the callback can be passed to JavaScript.
16#[proc_macro]
17#[proc_macro_error]
18pub fn callback(input: TokenStream) -> TokenStream {
19    let result = parse_macro_input!(input as Callback);
20    let ts = result.to_token_stream();
21    //println!("\n===========> Callback <===========\n{}\n", ts.to_string());
22    ts.into()
23}
24
25/// Derives `CastFromJs` for a type, generating the implementation that safely
26/// casts a `JsValue` reference back into the corresponding Rust type via
27/// `workflow-wasm`'s conversion helpers.
28#[proc_macro_derive(CastFromJs)]
29pub fn derive_cast_from_js(input: TokenStream) -> TokenStream {
30    derive_cast_from_js::derive_cast_from_js(input)
31}