Skip to main content

hpl_toolkit_derive_to_schema/
lib.rs

1extern crate proc_macro;
2mod renderers;
3mod utils;
4use syn::parse_macro_input;
5
6#[proc_macro_derive(ToSchema)]
7pub fn to_schema(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
8    let input_str = input.to_string();
9    let input_split = input_str.split("{").collect::<Vec<&str>>();
10    let renderee = input_split.first().unwrap();
11
12    if renderee.contains("struct") {
13        let strct = parse_macro_input!(input as syn::ItemStruct);
14
15        if strct.generics.params.len() > 0 {
16            panic!("`ToSchema` derive does not allow generics");
17        }
18
19        renderers::SchemaStruct::new(strct).render()
20    } else if renderee.contains("enum") {
21        let enm = parse_macro_input!(input as syn::ItemEnum);
22
23        if enm.generics.params.len() > 0 {
24            panic!("`ToSchema` derive does not allow generics");
25        }
26
27        renderers::SchemaEnum::new(enm).render()
28    } else {
29        panic!("Unknown structured provided for ToSchema, only enum and struct are allowed")
30    }
31}