ratatui_kit_macros/
lib.rs

1use element::ElementOrAdapter;
2use proc_macro::TokenStream;
3use props::ParsedProps;
4use quote::ToTokens;
5
6mod adapter;
7mod component;
8mod element;
9mod props;
10#[cfg(feature = "router")]
11mod router;
12#[cfg(feature = "store")]
13mod store;
14mod utils;
15
16#[proc_macro_derive(Props)]
17pub fn derive_props(item: TokenStream) -> TokenStream {
18    let props = syn::parse_macro_input!(item as ParsedProps);
19    props.to_token_stream().into()
20}
21
22#[proc_macro]
23pub fn element(input: TokenStream) -> TokenStream {
24    let element = syn::parse_macro_input!(input as ElementOrAdapter);
25    element.to_token_stream().into()
26}
27
28#[proc_macro_attribute]
29pub fn component(_attr: TokenStream, item: TokenStream) -> TokenStream {
30    let component = syn::parse_macro_input!(item as component::ParsedComponent);
31    component.to_token_stream().into()
32}
33
34#[cfg(feature = "router")]
35#[proc_macro]
36pub fn routes(input: TokenStream) -> TokenStream {
37    let routes = syn::parse_macro_input!(input as router::Routes);
38    routes.to_token_stream().into()
39}
40
41#[cfg(feature = "store")]
42#[proc_macro]
43pub fn use_stores(input: TokenStream) -> TokenStream {
44    let stores = syn::parse_macro_input!(input as store::UseStores);
45    stores.to_token_stream().into()
46}
47
48#[cfg(feature = "store")]
49#[proc_macro_derive(Store)]
50pub fn derive_store(item: TokenStream) -> TokenStream {
51    let store = syn::parse_macro_input!(item as store::Store);
52    store.to_token_stream().into()
53}