1
0
Fork 0
mirror of https://gitlab.com/msrd0/gotham-restful.git synced 2025-02-22 20:52:27 +00:00

default to NoContent when method has no return type

This commit is contained in:
Dominic 2019-10-05 14:56:51 +02:00
parent 5a62af6319
commit a28ccb98f1
Signed by: msrd0
GPG key ID: DCC8C247452E98F9
2 changed files with 17 additions and 15 deletions

View file

@ -49,38 +49,33 @@ fn read(_state : &mut State, id : u64) -> Success<User>
}
#[rest_create(Users)]
fn create(_state : &mut State, body : User) -> NoContent
fn create(_state : &mut State, body : User)
{
info!("Created User: {}", body.username);
().into()
}
#[rest_update_all(Users)]
fn update_all(_state : &mut State, body : Vec<User>) -> NoContent
fn update_all(_state : &mut State, body : Vec<User>)
{
info!("Changing all Users to {:?}", body.into_iter().map(|u| u.username).collect::<Vec<String>>());
().into()
}
#[rest_update(Users)]
fn update(_state : &mut State, id : u64, body : User) -> NoContent
fn update(_state : &mut State, id : u64, body : User)
{
info!("Change User {} to {}", id, body.username);
().into()
}
#[rest_delete_all(Users)]
fn delete_all(_state : &mut State) -> NoContent
fn delete_all(_state : &mut State)
{
info!("Delete all Users");
().into()
}
#[rest_delete(Users)]
fn delete(_state : &mut State, id : u64) -> NoContent
fn delete(_state : &mut State, id : u64)
{
info!("Delete User {}", id);
().into()
}
const ADDR : &str = "127.0.0.1:18080";

View file

@ -59,9 +59,9 @@ pub fn expand_method(method : Method, attrs : TokenStream, item : TokenStream) -
let ident = parse_macro_input!(attrs as Ident);
let fun = parse_macro_input!(item as ItemFn);
let ret = match fun.sig.output {
ReturnType::Default => quote!(()),
ReturnType::Type(_, ty) => quote!(#ty)
let (ret, is_no_content) = match fun.sig.output {
ReturnType::Default => (quote!(::gotham_restful::NoContent), true),
ReturnType::Type(_, ty) => (quote!(#ty), false)
};
let args : Vec<(TokenStream2, TokenStream2)> = fun.sig.inputs.iter().map(|arg| match arg {
FnArg::Typed(arg) => {
@ -79,7 +79,11 @@ 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;
let block = fun.block.stmts;
let ret_stmt = match is_no_content {
true => Some(quote!(().into())),
false => None
};
let trait_ident = method.trait_ident();
let fn_ident = method.fn_ident();
@ -89,7 +93,10 @@ pub fn expand_method(method : Method, attrs : TokenStream, item : TokenStream) -
where #ident : ::gotham_restful::Resource
{
fn #fn_ident(#(#args),*) -> #ret
#block
{
#(#block)*
#ret_stmt
}
}
};
output.into()