ridl_derive/
lib.rs

1use proc_macro::TokenStream;
2
3#[cfg(feature = "wasm")]
4mod wasm;
5
6#[cfg(feature = "py")]
7mod py;
8
9/// A procedural macro that applies #[derive(Popo)] and #[PyClass] to a struct.
10#[cfg(feature = "py")]
11#[proc_macro_attribute]
12pub fn popo(attr: TokenStream, input: TokenStream) -> TokenStream {
13    crate::py::impl_popo(attr, input)
14}
15
16/// A derive macro for easy implementation of POPOs.
17#[cfg(feature = "py")]
18#[proc_macro_derive(Popo)]
19pub fn popo_macro_derive(input: TokenStream) -> TokenStream {
20    let ast = syn::parse(input).unwrap();
21    crate::py::impl_popo_macro_derive(&ast)
22}
23
24/// A procedural macro that applies #[derive(Pojso)] and #[wasm_bindgen] to a struct.
25#[cfg(feature = "wasm")]
26#[proc_macro_attribute]
27pub fn pojso(attr: TokenStream, input: TokenStream) -> TokenStream {
28    crate::wasm::impl_pojso(attr, input)
29}
30
31/// A derive macro for easy implementation of POJSOs.
32#[cfg(feature = "wasm")]
33#[proc_macro_derive(Pojso)]
34pub fn pojso_macro_derive(input: TokenStream) -> TokenStream {
35    let ast = syn::parse(input).unwrap();
36    crate::wasm::impl_pojso_macro_derive(&ast)
37}