in api_generator/src/generator/code_gen/request/request_builder.rs [181:240]
fn create_new_fn(
builder_name: &str,
builder_ident: &syn::Ident,
enum_builder: &EnumBuilder,
default_fields: &[&syn::Ident],
) -> Tokens {
let (enum_ty, _, _) = enum_builder.clone().build();
let default_fields = Self::create_default_fields(default_fields);
// default cat APIs to using text/plain Content-Type and Accept headers. Not all
// headers are added here, but instead are added in Transport::send, because
// we want to apply default headers when send is called directly, which may
// be the case for experimental and beta APIs
let headers = {
if builder_name.starts_with("Cat") {
quote! {
let mut headers = HeaderMap::with_capacity(2);
headers.insert(CONTENT_TYPE, HeaderValue::from_static("text/plain"));
headers.insert(ACCEPT, HeaderValue::from_static("text/plain"));
}
} else {
quote! {let headers = HeaderMap::new();}
}
};
if enum_builder.contains_single_parameterless_part() {
let doc = doc(format!("Creates a new instance of [{}]", &builder_name));
quote!(
#doc
pub fn new(transport: &'a Transport) -> Self {
#headers
#builder_ident {
transport,
parts: #enum_ty::None,
headers,
#(#default_fields),*,
}
}
)
} else {
let doc = doc(format!(
"Creates a new instance of [{}] with the specified API parts",
&builder_name
));
quote!(
#doc
pub fn new(transport: &'a Transport, parts: #enum_ty) -> Self {
#headers
#builder_ident {
transport,
parts,
headers,
#(#default_fields),*,
}
}
)
}
}