gxi_derive/
lib.rs

1extern crate proc_macro;
2
3use derive_vnode::derive_vnode;
4use proc_macro::TokenStream;
5use quote::{quote, ToTokens};
6
7use crate::parsers::*;
8
9mod derive_vnode;
10mod parsers;
11mod v_node_type;
12
13#[proc_macro_attribute]
14pub fn gxi_vnode(attr: TokenStream, input: TokenStream) -> TokenStream {
15    let input = syn::parse::<syn::ItemStruct>(input).unwrap();
16    let name = input.ident.to_token_stream();
17    let derive = derive_vnode(&name, &attr.into());
18    (quote! {
19        #input
20        #derive
21    })
22    .into()
23}
24
25#[proc_macro_derive(Widget)]
26pub fn gxi_widget_derive(input: TokenStream) -> TokenStream {
27    parse_widget_derive(input).into()
28}
29
30#[proc_macro_derive(TopLevelContainerWidget)]
31pub fn gxi_tpp_level_container_widget_derive(input: TokenStream) -> TokenStream {
32    parse_top_level_container_widget_derive(input).into()
33}
34
35#[proc_macro_derive(ContainerWidget)]
36pub fn gxi_container_widget_derive(input: TokenStream) -> TokenStream {
37    parse_container_widget_derive(input).into()
38}