extern crate proc_macro;
use proc_macro::TokenStream;
use quote::{quote, ToTokens};
use syn::parse::Parse;
use syn::parse_macro_input;
use uuid::Uuid;
mod r#impl;
mod parsing;
use crate::r#impl::PageWrapper;
use r#impl::Component;
#[allow(clippy::all)]
#[proc_macro]
pub fn view(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as Component);
let expanded = input.to_token_stream();
expanded.into()
}
#[allow(clippy::all)]
#[proc_macro]
pub fn page(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as PageWrapper);
let expanded = input.to_token_stream();
expanded.into()
}
#[allow(clippy::all)]
#[proc_macro]
pub fn head(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as Component);
let x = Uuid::new_v4().to_string();
let input = quote!(
page.add_elements_to_head(#x, #input);
);
let expanded = input.to_token_stream();
expanded.into()
}
#[allow(clippy::all)]
#[proc_macro]
pub fn scoped_css(input: TokenStream) -> TokenStream {
let file_name = input.to_string().replace("\"", "");
let x = format!("tidos-{}", Uuid::new_v4().to_string());
let input = quote!(
{
page.add_elements_to_head(#x, String::from(concat!("<style>.", #x, " {", include_str!(#file_name), "}</style>")));
#x
}
);
let expanded = input.to_token_stream();
expanded.into()
}