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#[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}