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#[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/*
56#[derive(IntoMessage)]
57#[message(json)]
58*/
59#[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}