You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.1 KiB
Rust

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<Component>,
}
struct Component {
name: Path,
params: Option<Params>,
body: Option<Body>,
}
enum Params {
/// `name: value` style parameter list
Named(Vec<NamedParam>),
/// tuple style unnamed parameter list
Anon(Vec<Expr>),
}
struct NamedParam {
pub name: Ident,
pub colon: token::Colon,
pub val: Expr,
}
struct EventHandler {
pub name: Ident,
pub callback: Expr,
}