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
11#[cfg(feature = "router")]
12mod router;
13mod utils;
14
15#[proc_macro_derive(Props)]
16pub fn derive_props(item: TokenStream) -> TokenStream {
17    let props = syn::parse_macro_input!(item as ParsedProps);
18    props.to_token_stream().into()
19}
20
21#[proc_macro]
22pub fn element(input: TokenStream) -> TokenStream {
23    let element = syn::parse_macro_input!(input as ElementOrAdapter);
24    element.to_token_stream().into()
25}
26
27#[proc_macro_attribute]
28pub fn component(_attr: TokenStream, item: TokenStream) -> TokenStream {
29    let component = syn::parse_macro_input!(item as component::ParsedComponent);
30    component.to_token_stream().into()
31}
32
33#[cfg(feature = "router")]
34#[proc_macro]
35pub fn routes(input: TokenStream) -> TokenStream {
36    let routes = syn::parse_macro_input!(input as router::Routes);
37    routes.to_token_stream().into()
38}