1
0
Fork 0
mirror of https://gitlab.com/msrd0/gotham-restful.git synced 2025-07-16 01:01:28 +00:00

add first tests

This commit is contained in:
Dominic 2019-10-14 02:17:25 +02:00
parent 5c5c7fc4fb
commit df3b735429
Signed by: msrd0
GPG key ID: DCC8C247452E98F9
7 changed files with 108 additions and 22 deletions

View file

@ -84,11 +84,12 @@ impl Method
pub fn expand_method(method : Method, attrs : TokenStream, item : TokenStream) -> TokenStream
{
let krate = super::krate();
let ident = parse_macro_input!(attrs as Ident);
let fun = parse_macro_input!(item as ItemFn);
let (ret, is_no_content) = match fun.sig.output {
ReturnType::Default => (quote!(::gotham_restful::NoContent), true),
ReturnType::Default => (quote!(#krate::NoContent), true),
ReturnType::Type(_, ty) => (quote!(#ty), false)
};
let args : Vec<(TokenStream2, TokenStream2)> = fun.sig.inputs.iter().map(|arg| match arg {
@ -103,15 +104,15 @@ pub fn expand_method(method : Method, attrs : TokenStream, item : TokenStream) -
generics.push(quote!(#ret));
let args : Vec<TokenStream2> = args.into_iter().map(|(pat, ty)| quote!(#pat : #ty)).collect();
let block = fun.block.stmts;
let ret_stmt = if is_no_content { Some(quote!(#ret::default())) } else { None };
let ret_stmt = if is_no_content { Some(quote!(Default::default())) } else { None };
let trait_ident = method.trait_ident();
let fn_ident = method.fn_ident();
let setup_ident = method.setup_ident();
let output = quote! {
impl ::gotham_restful::#trait_ident<#(#generics),*> for #ident
where #ident : ::gotham_restful::Resource
impl #krate::#trait_ident<#(#generics),*> for #ident
where #ident : #krate::Resource
{
fn #fn_ident(#(#args),*) -> #ret
{
@ -121,7 +122,7 @@ pub fn expand_method(method : Method, attrs : TokenStream, item : TokenStream) -
}
#[deny(dead_code)]
fn #setup_ident<D : ::gotham_restful::DrawResourceRoutes>(route : &mut D)
fn #setup_ident<D : #krate::DrawResourceRoutes>(route : &mut D)
{
route.#fn_ident::<#ident, #(#generics),*>();
}