riptide_amm_macros/
lib.rs1mod wasm_const;
2mod wasm_enum;
3mod wasm_fn;
4mod wasm_struct;
5
6mod alias_fn;
7
8use proc_macro::TokenStream;
9use proc_macro2::TokenStream as TokenStream2;
10use syn::{parse::Nothing, parse2, Item, Result};
11
12#[proc_macro_attribute]
13pub fn wasm_expose(attr: TokenStream, item: TokenStream) -> TokenStream {
14 match wasm_expose_impl(attr, item) {
15 Ok(expanded) => expanded,
16 Err(err) => err.to_compile_error().into(),
17 }
18}
19
20fn wasm_expose_impl(attr: TokenStream, item: TokenStream) -> Result<TokenStream> {
21 let attr: Nothing = parse2(attr.into())?;
22 let item: Item = parse2(item.into())?;
23
24 let result = match item {
25 Item::Struct(s) => crate::wasm_struct::wasm_struct_impl(s, attr),
26 Item::Enum(e) => crate::wasm_enum::wasm_enum_impl(e, attr),
27 Item::Const(c) => crate::wasm_const::wasm_const_impl(c, attr),
28 Item::Fn(f) => crate::wasm_fn::wasm_fn_impl(f, attr),
29 _ => Err(syn::Error::new_spanned(item, "Unexpected item")),
30 };
31
32 result.map(|ts| ts.into())
33}
34
35#[proc_macro_attribute]
36pub fn alias(attr: TokenStream, item: TokenStream) -> TokenStream {
37 match alias_impl(attr, item) {
38 Ok(expanded) => expanded,
39 Err(err) => err.to_compile_error().into(),
40 }
41}
42
43fn alias_impl(attr: TokenStream, item: TokenStream) -> Result<TokenStream> {
44 let item: Item = parse2(item.into())?;
45
46 let result = match item {
47 Item::Fn(f) => crate::alias_fn::alias_fn_impl(f, TokenStream2::from(attr)),
48 _ => Err(syn::Error::new_spanned(item, "Unexpected item")),
49 };
50
51 result.map(|ts| ts.into())
52}