hpl_toolkit_derive_to_schema/
lib.rs1extern 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}