Skip to main content

topcoat_view_macro/
lib.rs

1use proc_macro::TokenStream;
2use quote::quote;
3
4#[doc = include_str!("../docs/view.md")]
5#[proc_macro]
6pub fn view(tokens: TokenStream) -> TokenStream {
7    let parsed = syn::parse_macro_input!(tokens as topcoat_view_grammar::view::View);
8    quote! { #parsed }.into()
9}
10
11#[doc = include_str!("../docs/attributes.md")]
12#[proc_macro]
13pub fn attributes(tokens: TokenStream) -> TokenStream {
14    let parsed = syn::parse_macro_input!(tokens as topcoat_view_grammar::attributes::Attributes);
15    quote! { #parsed }.into()
16}
17
18#[doc = include_str!("../docs/class.md")]
19#[proc_macro]
20pub fn class(tokens: TokenStream) -> TokenStream {
21    let parsed = syn::parse_macro_input!(tokens as topcoat_view_grammar::class::Class);
22    quote! { #parsed }.into()
23}
24
25#[doc = include_str!("../docs/component.md")]
26#[proc_macro_attribute]
27pub fn component(attr: TokenStream, item: TokenStream) -> TokenStream {
28    match topcoat_view_grammar::component::Component::parse(attr.into(), item.into()) {
29        Ok(value) => quote! { #value }.into(),
30        Err(error) => error.to_compile_error().into(),
31    }
32}
33
34#[doc = include_str!("../docs/props.md")]
35#[proc_macro_derive(Props, attributes(default, into))]
36pub fn props(item: TokenStream) -> TokenStream {
37    match topcoat_view_grammar::props::Props::parse(item.into()) {
38        Ok(value) => quote! { #value }.into(),
39        Err(error) => error.to_compile_error().into(),
40    }
41}