Skip to main content

autapi_macros/
lib.rs

1use proc_macro::TokenStream;
2use syn::{DeriveInput, ItemFn, parse_macro_input};
3
4mod doc_attr;
5mod endpoint;
6mod responses;
7mod to_schema;
8mod utils;
9
10#[proc_macro_attribute]
11pub fn endpoint(attr: TokenStream, item: TokenStream) -> TokenStream {
12    TokenStream::from(endpoint::endpoint(
13        proc_macro2::TokenStream::from(attr),
14        parse_macro_input!(item as ItemFn),
15    ))
16}
17
18#[proc_macro_derive(DescribeResponse)]
19pub fn derive_response(attr: TokenStream) -> TokenStream {
20    let input = parse_macro_input!(attr as DeriveInput);
21    TokenStream::from(responses::derive_responses(input))
22}
23
24/// Implement `ToSchema`, `SchemaSerialize` and `SchemaDeserialize` for a type.
25#[proc_macro_derive(ToSchema, attributes(schema))]
26pub fn derive_to_schema(attr: TokenStream) -> TokenStream {
27    let input = parse_macro_input!(attr as DeriveInput);
28    let result = to_schema::derive_to_schema(input).unwrap_or_else(|t| t);
29    TokenStream::from(result)
30}