extern crate proc_macro;
use attribute_utils::update_openapi_macro_attributes;
use proc_macro::TokenStream;
use quote::quote;
use string_utils::{discover, extract_paths};
use syn::parse_macro_input;
use token_utils::{check_macro_placement, extract_attributes, output_macro};
use utoipauto_core::{attribute_utils, string_utils, token_utils};
#[proc_macro_attribute]
pub fn utoipauto(
attributes: proc_macro::TokenStream, item: proc_macro::TokenStream, ) -> proc_macro::TokenStream {
let paths: String = extract_attributes(attributes.into());
let paths: Vec<String> = extract_paths(paths);
let mut openapi_macro = parse_macro_input!(item as syn::ItemStruct);
let (uto_paths, uto_models, uto_reponses): (String, String, String) = discover(paths);
let openapi_macro_attibutes = &mut openapi_macro.attrs;
check_macro_placement(openapi_macro_attibutes.clone());
update_openapi_macro_attributes(
openapi_macro_attibutes,
&uto_paths,
&uto_models,
&uto_reponses,
);
output_macro(openapi_macro)
}
#[proc_macro_attribute]
pub fn utoipa_ignore(
_attr: proc_macro::TokenStream,
item: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
let input = parse_macro_input!(item as syn::Item);
let code = quote!(
#input
);
TokenStream::from(code)
}