Skip to content

Commit

Permalink
feat(wasm): add support for enum on export macro
Browse files Browse the repository at this point in the history
  • Loading branch information
Vexcited committed Dec 31, 2024
1 parent c4dab7a commit 6de586f
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
7 changes: 7 additions & 0 deletions wasm/examples/export.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ pub fn retrieve_cas() {
pub fn update() {
}

#[wasm::export]
pub enum SomeEnum {
A,
B,
C,
}

#[wasm::export]
pub struct Session {
instance_url: String,
Expand Down
25 changes: 24 additions & 1 deletion wasm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ use quote::quote;
/// impl Session {
/// // ...
/// }
///
/// #[cfg_attr(target_arch = "wasm32", wasm::export)]
/// pub enum SomeEnum {
/// // ...
/// }
/// ```
///
/// ## Notes
Expand Down Expand Up @@ -97,6 +102,24 @@ pub fn export(_args: TokenStream, input: TokenStream) -> TokenStream {

TokenStream::from(output)
},
syn::Item::Enum(mut input) => {
let vis = &input.vis;
let ident = &input.ident;
let variants = &input.variants;
let attrs = &mut input.attrs;

let wasm_bindgen_attr: Attribute = parse_quote!(#[wasm_bindgen::prelude::wasm_bindgen]);
attrs.push(wasm_bindgen_attr);

let output = quote! {
#(#attrs)*
#vis enum #ident {
#variants
}
};

TokenStream::from(output)
},
syn::Item::Impl(mut input) => {
let attrs = &mut input.attrs;
let self_ty = &input.self_ty;
Expand All @@ -114,7 +137,7 @@ pub fn export(_args: TokenStream, input: TokenStream) -> TokenStream {

TokenStream::from(output)
},
_ => panic!("Only functions, structs and impls are supported"),
_ => panic!("Only functions, structs, enums and impls are supported"),
}
}

Expand Down

0 comments on commit 6de586f

Please sign in to comment.