Mercurial > lbo > hg > async-google-apis
changeset 188:d6d4afc03622
Minor fixes to enums generated code
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Fri, 29 Jan 2021 11:44:58 +0100 |
parents | 9057a045fd41 |
children | a7168ed85cc4 |
files | generate/generate.py generate/templates.py |
diffstat | 2 files changed, 30 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/generate/generate.py Fri Jan 29 11:44:28 2021 +0100 +++ b/generate/generate.py Fri Jan 29 11:44:58 2021 +0100 @@ -34,16 +34,17 @@ return name[0].upper() + name[1:] +def sanitize_id(s): + return s.replace('$', 'dollar').replace('#', 'hash').replace('.', '_') + + def rust_identifier(name): - def sanitize(s): - return s.replace('$', 'dollar').replace('#', 'hash').replace('.', '_') - def r(c): if not c.isupper(): return c return '_' + c.lower() - return ''.join([(r(c) if i > 0 else c.lower()) for i, c in enumerate(sanitize(name))]) + return ''.join([(r(c) if i > 0 else c.lower()) for i, c in enumerate(sanitize_id(name))]) def snake_to_camel(name): @@ -175,19 +176,20 @@ return build('DateTime', typ='DateTime<Utc>') if 'enum' in schema and name: - name_ = snake_to_camel(rust_identifier(name)) + name_ = (sanitize_id(name)) def sanitize_enum_value(v): if v[0].isnumeric(): return '_'+v - return snake_to_camel(v) + return v[0].upper() + v[1:] values = [{ 'line': sanitize_enum_value(ev), + 'jsonvalue': ev, 'desc': schema.get('enumDescriptions', ['']*(i))[i]} for (i, ev) in enumerate(schema.get('enum', []))] templ_params = {'name': name_, 'values': values} print('Emitted enum', name_, 'with', len(values), 'fields') - return (name_, schema.get('description', '')), structs, [templ_params] + return (optionalize(name_, optional), schema.get('description', '')), structs, [templ_params] return (optionalize('String', optional), schema.get('description', '')), structs, enums
--- a/generate/templates.py Fri Jan 29 11:44:28 2021 +0100 +++ b/generate/templates.py Fri Jan 29 11:44:58 2021 +0100 @@ -49,13 +49,33 @@ # # fields: {name, values: [{desc, line}]} SchemaEnumTmpl = ''' -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, Serialize, Deserialize)] pub enum {{{name}}} { + Undefined, {{#values}} /// {{{desc}}} + #[serde(rename = "{{{jsonvalue}}}")] {{{line}}}, {{/values}} } + +impl std::default::Default for {{{name}}} { + fn default() -> {{{name}}} { + {{{name}}}::Undefined + } +} + +impl std::fmt::Display for {{{name}}} { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let s = match self { + {{{name}}}::Undefined => write!(f, "undefined"), + {{#values}} + {{{name}}}::{{{line}}} => write!(f, "{{{jsonvalue}}}"), + {{/values}} + }; + Ok(()) + } +} ''' # A struct for parameters or input/output API types.