in api_generator/src/generator/code_gen/mod.rs [167:230]
fn typekind_to_ty(name: &str, kind: &TypeKind, required: bool, fn_arg: bool) -> syn::Ty {
let mut v = String::new();
if !required {
v.push_str("Option<");
}
let str_type = "&'b str";
match kind {
TypeKind::Unknown(_) => v.push_str(str_type),
TypeKind::List => {
v.push_str("&'b [");
v.push_str(str_type);
v.push(']');
}
TypeKind::Enum => match name {
// opened https://github.com/elastic/elasticsearch/issues/53212
// to discuss whether this really should be a collection
"expand_wildcards" => {
// Expand wildcards should
v.push_str("&'b [");
v.push_str(name.to_pascal_case().as_str());
v.push(']');
}
_ => v.push_str(name.to_pascal_case().as_str()),
},
TypeKind::String => v.push_str(str_type),
TypeKind::Text => v.push_str(str_type),
TypeKind::Boolean => match name {
// keep until https://github.com/elastic/elasticsearch/pull/57329 is merged
"track_total_hits" => {
if fn_arg {
v.push_str(format!("Into<{}>", name.to_pascal_case()).as_str())
} else {
v.push_str(name.to_pascal_case().as_str())
}
}
_ => v.push_str("bool"),
},
TypeKind::Number => v.push_str("i64"),
TypeKind::Float => v.push_str("f32"),
TypeKind::Double => v.push_str("f64"),
TypeKind::Integer => v.push_str("i32"),
TypeKind::Long => v.push_str("i64"),
TypeKind::Date => v.push_str(str_type),
TypeKind::Time => v.push_str(str_type),
TypeKind::Union(u) => match name {
"slices" => v.push_str("Slices"),
"track_total_hits" => {
if fn_arg {
v.push_str(format!("Into<{}>", name.to_pascal_case()).as_str())
} else {
v.push_str(name.to_pascal_case().as_str())
}
}
_ => panic!("unsupported union type: {:?} for {}", u, name),
},
};
if !required {
v.push('>');
}
syn::parse_type(v.as_str()).unwrap()
}