fix: only wrap single struct param in a tuple (#368)

This commit is contained in:
Matthias Seitz 2021-08-11 02:21:30 +02:00 committed by GitHub
parent d911e38c1f
commit 109a6b85ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 5 additions and 1 deletions

View File

@ -80,7 +80,11 @@ pub(crate) fn expand_inputs_call_arg(inputs: &[Param]) -> TokenStream {
.map(|(i, param)| { .map(|(i, param)| {
let name = util::expand_input_name(i, &param.name); let name = util::expand_input_name(i, &param.name);
match param.kind { match param.kind {
ParamType::Tuple(_) => { // this is awkward edge case where the function inputs are a single struct
// we need to force this argument into a tuple so it gets expanded to `((#name,))`
// this is currently necessary because internally `flatten_tokens` is called which removes the outermost `tuple` level
// and since `((#name))` is not a rust tuple it doesn't get wrapped into another tuple that will be peeled off by `flatten_tokens`
ParamType::Tuple(_) if inputs.len() == 1 => {
// make sure the tuple gets converted to `Token::Tuple` // make sure the tuple gets converted to `Token::Tuple`
quote! {(#name,)} quote! {(#name,)}
} }