rglw_api_codegen/
lib.rs

1use proc_macro::TokenStream;
2use rglw::codegen_utils::macro_attribute_arguments::MacroAttributeArguments;
3use syn::{DeriveInput, ItemFn, parse_macro_input};
4
5mod derives;
6mod attributes;
7mod procedural;
8
9#[proc_macro_derive(BinaryMessage)]
10pub fn binary_message(input: TokenStream) -> TokenStream {
11    derives::binary_message::implementation(input)
12}
13
14#[proc_macro_derive(Injectable)]
15pub fn injectable(input: TokenStream) -> TokenStream {
16    derives::injectable::implementation(parse_macro_input!(input as DeriveInput)).into()
17}
18
19#[proc_macro_derive(Service, attributes(service_type))]
20pub fn service(input: TokenStream) -> TokenStream {
21    derives::service::implementation(parse_macro_input!(input as DeriveInput)).into()
22}
23
24#[proc_macro_attribute]
25pub fn controller(attr: TokenStream, input: TokenStream) -> TokenStream {
26    attributes::controller::implementation(parse_macro_input!(attr as MacroAttributeArguments), parse_macro_input!(input as ItemFn)).into()
27}
28
29#[proc_macro_attribute]
30pub fn handler(attr: TokenStream, input: TokenStream) -> TokenStream {
31    attributes::handler::implementation(parse_macro_input!(attr as MacroAttributeArguments), parse_macro_input!(input as ItemFn)).into()
32}
33
34#[proc_macro]
35pub fn setup_routes(input: TokenStream) -> TokenStream {
36    procedural::setup_routes::implementation(input.into()).into()
37}