in api_generator/src/generator/code_gen/request/request_builder.rs [122:178]
fn create_query_string_expression(endpoint_params: &BTreeMap<String, Type>) -> Tokens {
if endpoint_params.is_empty() {
quote!(None::<()>)
} else {
let query_struct_ty = ident("QueryParams");
let struct_fields = endpoint_params.iter().map(|(param_name, param_type)| {
let field = Self::create_struct_field((param_name, param_type));
let renamed = field.ident.as_ref().unwrap() != param_name;
let serde_rename = if renamed {
let field_rename = lit(param_name);
quote! {
#[serde(rename = #field_rename)]
}
} else {
quote!()
};
// TODO: we special case expand_wildcards here to be a list, but this should be fixed upstream
let expand = param_type.ty == TypeKind::List || param_name == "expand_wildcards";
let serialize_with = if expand {
quote! {
#[serde(serialize_with = "crate::client::serialize_coll_qs")]
}
} else {
quote!()
};
quote! {
#serde_rename
#serialize_with
#field
}
});
let query_ctor = endpoint_params.keys().map(|param_name| {
let field_name = ident(valid_name(param_name).to_lowercase());
quote! {
#field_name: self.#field_name
}
});
quote! {
{
#[serde_with::skip_serializing_none]
#[derive(Serialize)]
struct #query_struct_ty<'b> {
#(#struct_fields,)*
}
let query_params = #query_struct_ty {
#(#query_ctor,)*
};
Some(query_params)
}
}
}
}