Skip to content

Commit fc2d734

Browse files
committed
Add testcase
1 parent a10a2bb commit fc2d734

1 file changed

Lines changed: 7 additions & 21 deletions

File tree

crates/vespera_macro/src/multipart_impl.rs

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -89,35 +89,21 @@ fn process_fields<'a>(
8989
// Field value parsing — explicit turbofish types are required because
9090
// RPITIT opaque return types prevent the compiler from inferring
9191
// `TryFromFieldWithState::Self` through `.await`.
92-
let parse_value = quote! {
93-
<#parse_ty as vespera::multipart::TryFromFieldWithState<__VesperaS__>>::try_from_field_with_state(
94-
__field__, #limit_tokens, __state__
95-
).await?
96-
};
92+
let try_from_call = quote! { <#parse_ty as vespera::multipart::TryFromFieldWithState<__VesperaS__>>::try_from_field_with_state };
93+
let parse_value = quote! { #try_from_call(__field__, #limit_tokens, __state__).await? };
9794

9895
let assignment = if is_vec {
9996
quote! { #ident.push(#parse_value); }
10097
} else if strict {
101-
quote! {
102-
if #ident.is_none() {
103-
#ident = std::option::Option::Some(#parse_value);
104-
} else {
105-
return std::result::Result::Err(
106-
vespera::multipart::TypedMultipartError::DuplicateField {
107-
field_name: std::string::String::from(#field_name)
108-
}
109-
);
110-
}
111-
}
98+
let set_value = quote! { #ident = std::option::Option::Some(#parse_value) };
99+
let dup_err = quote! { return std::result::Result::Err(vespera::multipart::TypedMultipartError::DuplicateField { field_name: std::string::String::from(#field_name) }) };
100+
quote! { if #ident.is_none() { #set_value ; } else { #dup_err ; } }
112101
} else {
113102
quote! { #ident = std::option::Option::Some(#parse_value); }
114103
};
115104

116-
cg.assignments.push(quote! {
117-
if __field_name__ == #field_name {
118-
#assignment
119-
}
120-
});
105+
let field_match = quote! { if __field_name__ == #field_name { #assignment } };
106+
cg.assignments.push(field_match);
121107

122108
// Post-loop: required field checks / defaults
123109
if !is_option && !is_vec {

0 commit comments

Comments
 (0)