1
0
Fork 0
mirror of https://gitlab.com/msrd0/gotham-restful.git synced 2025-02-23 04:52:28 +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)] #[rest_create(Users)]
fn create(_state : &mut State, body : User) -> NoContent fn create(_state : &mut State, body : User)
{ {
info!("Created User: {}", body.username); info!("Created User: {}", body.username);
().into()
} }
#[rest_update_all(Users)] #[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>>()); info!("Changing all Users to {:?}", body.into_iter().map(|u| u.username).collect::<Vec<String>>());
().into()
} }
#[rest_update(Users)] #[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); info!("Change User {} to {}", id, body.username);
().into()
} }
#[rest_delete_all(Users)] #[rest_delete_all(Users)]
fn delete_all(_state : &mut State) -> NoContent fn delete_all(_state : &mut State)
{ {
info!("Delete all Users"); info!("Delete all Users");
().into()
} }
#[rest_delete(Users)] #[rest_delete(Users)]
fn delete(_state : &mut State, id : u64) -> NoContent fn delete(_state : &mut State, id : u64)
{ {
info!("Delete User {}", id); info!("Delete User {}", id);
().into()
} }
const ADDR : &str = "127.0.0.1:18080"; 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 ident = parse_macro_input!(attrs as Ident);
let fun = parse_macro_input!(item as ItemFn); let fun = parse_macro_input!(item as ItemFn);
let ret = match fun.sig.output { let (ret, is_no_content) = match fun.sig.output {
ReturnType::Default => quote!(()), ReturnType::Default => (quote!(::gotham_restful::NoContent), true),
ReturnType::Type(_, ty) => quote!(#ty) ReturnType::Type(_, ty) => (quote!(#ty), false)
}; };
let args : Vec<(TokenStream2, TokenStream2)> = fun.sig.inputs.iter().map(|arg| match arg { let args : Vec<(TokenStream2, TokenStream2)> = fun.sig.inputs.iter().map(|arg| match arg {
FnArg::Typed(arg) => { FnArg::Typed(arg) => {
@ -79,7 +79,11 @@ pub fn expand_method(method : Method, attrs : TokenStream, item : TokenStream) -
} }
generics.push(quote!(#ret)); generics.push(quote!(#ret));
let args : Vec<TokenStream2> = args.into_iter().map(|(pat, ty)| quote!(#pat : #ty)).collect(); 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 trait_ident = method.trait_ident();
let fn_ident = method.fn_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 where #ident : ::gotham_restful::Resource
{ {
fn #fn_ident(#(#args),*) -> #ret fn #fn_ident(#(#args),*) -> #ret
#block {
#(#block)*
#ret_stmt
}
} }
}; };
output.into() output.into()