lafere_api_codegen/
lib.rs

1mod 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/*
14#[api(Request)]
15async fn request(req: Request, session: &Session) -> Result<Response> {
16	todo!()
17}
18*/
19#[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/*
33#[enable_server_requests(Action)]
34async fn enable_server_requests(
35	sender: Requestor<Action, B>,
36) -> Result<(), lafere_api::error::Error> {
37	todo!()
38}
39
40#[enable_server_requests(Action, EncryptedBytes)]
41async fn esr_with_bytes(
42	_sender: Requestor<Action, EncryptedBytes>,
43) -> Result<(), lafere_api::error::Error> {
44	todo!()
45}
46*/
47#[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/*
63#[derive(IntoMessage)]
64#[message(json)]
65*/
66#[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}