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}