mod expand;
mod parse;
mod validate;
use proc_macro::TokenStream;
use syn::{ItemFn, parse_macro_input};
#[derive(Clone, Copy, Debug)]
pub enum EndpointKind {
Query,
Update,
}
pub fn expand_entry(kind: EndpointKind, attr: TokenStream, item: TokenStream) -> TokenStream {
let func = parse_macro_input!(item as ItemFn);
let sig = func.sig.clone();
let is_async = sig.asyncness.is_some();
let parsed = match parse::parse_args(attr.into()) {
Ok(v) => v,
Err(e) => return e.to_compile_error().into(),
};
let validated = match validate::validate(parsed, &sig, is_async) {
Ok(v) => v,
Err(e) => return e.to_compile_error().into(),
};
expand::expand(kind, validated, func).into()
}