lafere_api_codegen/
lib.rs1mod action;
2mod api;
3mod args;
4mod enable_server_requests;
5mod message;
6mod util;
7
8use args::{ApiArgs, EnableServerRequestsArgs};
9
10use proc_macro::TokenStream;
11use syn::{DeriveInput, ItemFn, parse_macro_input};
12
13#[proc_macro_attribute]
20pub fn api(attrs: TokenStream, item: TokenStream) -> TokenStream {
21 let args = parse_macro_input!(attrs as ApiArgs);
22 let item = parse_macro_input!(item as ItemFn);
23
24 let stream = api::expand(args, item);
25
26 stream
27 .map(|stream| stream.into())
28 .unwrap_or_else(|e| e.to_compile_error())
29 .into()
30}
31
32#[proc_macro_attribute]
48pub fn enable_server_requests(
49 attrs: TokenStream,
50 item: TokenStream,
51) -> TokenStream {
52 let args = parse_macro_input!(attrs as EnableServerRequestsArgs);
53 let item = parse_macro_input!(item as ItemFn);
54
55 let stream = enable_server_requests::expand(args, item);
56 stream
57 .map(|stream| stream.into())
58 .unwrap_or_else(|e| e.to_compile_error())
59 .into()
60}
61
62#[proc_macro_derive(IntoMessage, attributes(message))]
67pub fn derive_into_message(input: TokenStream) -> TokenStream {
68 let input = parse_macro_input!(input as DeriveInput);
69
70 message::into_expand(input)
71 .unwrap_or_else(|e| e.to_compile_error())
72 .into()
73}
74
75#[proc_macro_derive(FromMessage, attributes(message))]
76pub fn derive_from_message(input: TokenStream) -> TokenStream {
77 let input = parse_macro_input!(input as DeriveInput);
78
79 message::from_expand(input)
80 .unwrap_or_else(|e| e.to_compile_error())
81 .into()
82}
83
84#[proc_macro_derive(Action)]
85pub fn derive_action(input: TokenStream) -> TokenStream {
86 let input = parse_macro_input!(input as DeriveInput);
87
88 action::expand(input)
89 .unwrap_or_else(|e| e.to_compile_error())
90 .into()
91}