ratatui_kit_macros/
lib.rs1use element::ElementOrAdapter;
31use proc_macro::TokenStream;
32use props::ParsedProps;
33use quote::ToTokens;
34use syn::DeriveInput;
35
36use crate::with_layout_style::impl_layout_style;
37
38mod adapter;
39mod component;
40mod element;
41mod props;
42#[cfg(feature = "router")]
43mod router;
44#[cfg(feature = "store")]
45mod store;
46mod utils;
47mod with_layout_style;
48
49#[proc_macro_derive(Props, attributes(layout))]
50pub fn derive_props(item: TokenStream) -> TokenStream {
51 let props = syn::parse_macro_input!(item as ParsedProps);
52 props.to_token_stream().into()
53}
54
55#[proc_macro]
74pub fn element(input: TokenStream) -> TokenStream {
75 let element = syn::parse_macro_input!(input as ElementOrAdapter);
76 element.to_token_stream().into()
77}
78
79#[proc_macro_attribute]
81pub fn component(_attr: TokenStream, item: TokenStream) -> TokenStream {
82 let component = syn::parse_macro_input!(item as component::ParsedComponent);
83 component.to_token_stream().into()
84}
85
86#[cfg(feature = "router")]
87#[proc_macro]
88pub fn routes(input: TokenStream) -> TokenStream {
89 let routes = syn::parse_macro_input!(input as router::Routes);
90 routes.to_token_stream().into()
91}
92
93#[cfg(feature = "store")]
94#[proc_macro]
95pub fn use_stores(input: TokenStream) -> TokenStream {
96 let stores = syn::parse_macro_input!(input as store::UseStores);
97 stores.to_token_stream().into()
98}
99
100#[cfg(feature = "store")]
101#[proc_macro_derive(Store)]
102pub fn derive_store(item: TokenStream) -> TokenStream {
103 let store = syn::parse_macro_input!(item as store::Store);
104 store.to_token_stream().into()
105}
106
107#[proc_macro_attribute]
109pub fn with_layout_style(attr: TokenStream, item: TokenStream) -> TokenStream {
110 let layout_style = syn::parse_macro_input!(attr as with_layout_style::ParsedLayoutStyle);
111 let props = syn::parse_macro_input!(item as DeriveInput);
112 impl_layout_style(&layout_style, props).into()
113}