use crate::util::use_absolute; use proc_macro::TokenStream; use quote::quote; use syn::{parse_macro_input, token, Expr, Ident, Path}; mod compile; mod parse; pub fn invoke(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as Body); use_absolute! { core::iter::FromIterator as FromIterator, uwui::view::Template as Template, uwui::view::View as View, } let output = quote! { match (()) { (()) => { < #Template as #FromIterator<#View<_>> >::from_iter([ #input ]) } } }; output.into() } struct Body { elements: Vec, } struct Component { name: Path, params: Option, body: Option, } enum Params { /// `name: value` style parameter list Named(Vec), /// tuple style unnamed parameter list Anon(Vec), } struct NamedParam { pub name: Ident, pub colon: token::Colon, pub val: Expr, } struct EventHandler { pub name: Ident, pub callback: Expr, }