in api_generator/src/generator/code_gen/params.rs [37:78]
fn generate_param(tokens: &mut Tokens, e: &ApiEnum) {
let name = syn::Ident::from(e.name.to_pascal_case());
let (renames, variants): (Vec<String>, Vec<syn::Ident>) = e
.values
.iter()
.map(|v| {
if v.is_empty() {
(v.to_owned(), syn::Ident::from("Unspecified"))
} else if !v.contains('(') {
(v.to_owned(), syn::Ident::from(v.to_pascal_case()))
} else {
lazy_static! {
static ref PARENS_REGEX: Regex = Regex::new(r"^(.*?)\s*\(.*?\)\s*$").unwrap();
}
if let Some(c) = PARENS_REGEX.captures(v) {
(
c.get(1).unwrap().as_str().to_owned(),
syn::Ident::from(c.get(1).unwrap().as_str().to_pascal_case()),
)
} else {
(v.to_owned(), syn::Ident::from(v.to_pascal_case()))
}
}
})
.unzip();
let doc = e.description.as_ref().map(code_gen::doc_escaped);
let cfg_attr = e.stability.outer_cfg_attr();
let cfg_doc = stability_doc(e.stability);
let generated_enum_tokens = quote!(
#doc
#cfg_doc
#cfg_attr
#[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)]
pub enum #name {
#(#[serde(rename = #renames)] #variants),*
}
);
tokens.append(generated_enum_tokens);
}