#![recursion_limit = "196"]
#![warn(clippy::all, clippy::cast_possible_truncation, clippy::unused_self)]
#[cfg(not(test))]
extern crate proc_macro as tokens;
#[cfg(test)]
extern crate proc_macro2 as tokens;
use proc_macro::TokenStream;
mod branching;
mod dom;
mod fn_component;
mod gen;
mod itertools;
mod parse;
mod syntax;
mod tokenize;
use tokenize::prelude::*;
macro_rules! unwrap_err {
($expr:expr) => {
match $expr {
Ok(dom) => dom,
Err(err) => return err.tokenize().into(),
}
};
}
#[allow(clippy::let_and_return)]
#[proc_macro_attribute]
pub fn component(args: TokenStream, input: TokenStream) -> TokenStream {
let args = unwrap_err!(fn_component::args(args.into()));
let out = unwrap_err!(fn_component::component(args, input.into()));
out.into()
}
#[allow(clippy::let_and_return)]
#[proc_macro]
pub fn view(body: TokenStream) -> TokenStream {
let nodes = unwrap_err!(dom::parse(body.into()));
let transient = gen::generate(nodes);
let out = transient.tokenize();
out.into()
}