fn generate_param()

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);
}