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]
41pub fn enable_server_requests(
42 attrs: TokenStream,
43 item: TokenStream,
44) -> TokenStream {
45 let args = parse_macro_input!(attrs as EnableServerRequestsArgs);
46 let item = parse_macro_input!(item as ItemFn);
47
48 let stream = enable_server_requests::expand(args, item);
49 stream
50 .map(|stream| stream.into())
51 .unwrap_or_else(|e| e.to_compile_error())
52 .into()
53}
54
55#[proc_macro_derive(IntoMessage, attributes(message))]
60pub fn derive_into_message(input: TokenStream) -> TokenStream {
61 let input = parse_macro_input!(input as DeriveInput);
62
63 message::into_expand(input)
64 .unwrap_or_else(|e| e.to_compile_error())
65 .into()
66}
67
68#[proc_macro_derive(FromMessage, attributes(message))]
69pub fn derive_from_message(input: TokenStream) -> TokenStream {
70 let input = parse_macro_input!(input as DeriveInput);
71
72 message::from_expand(input)
73 .unwrap_or_else(|e| e.to_compile_error())
74 .into()
75}
76
77#[proc_macro_derive(Action)]
78pub fn derive_action(input: TokenStream) -> TokenStream {
79 let input = parse_macro_input!(input as DeriveInput);
80
81 action::expand(input)
82 .unwrap_or_else(|e| e.to_compile_error())
83 .into()
84}