Mercurial > lbo > hg > async-google-apis
changeset 114:346677d7293b
Format generated rust code and add global parameters to all resources
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Sun, 25 Oct 2020 13:10:08 +0100 |
parents | fdf0330d1cc4 |
children | 724c8fbd071c |
files | generate/generate.py |
diffstat | 1 files changed, 16 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/generate/generate.py Sun Oct 25 09:13:44 2020 +0100 +++ b/generate/generate.py Sun Oct 25 13:10:08 2020 +0100 @@ -12,6 +12,7 @@ import os from os import path +import subprocess from templates import * @@ -227,7 +228,7 @@ struct['optional_fields'] = opt_query_parameters frags.append(chevron.render(SchemaDisplayTmpl, struct)) # Generate parameter types for subresources. - frags.extend(generate_params_structs(resource.get('resources', {}), super_name=resourcename)) + frags.extend(generate_params_structs(resource.get('resources', {}), super_name=resourcename, global_params=global_params)) return frags @@ -243,7 +244,7 @@ return 'format!("{}", {})'.format(string, format_params), snakeparams -def generate_service(resource, methods, discdoc): +def generate_service(resource, methods, discdoc, generate_subresources=True): """Generate the code for all methods in a resource. Returns a rendered string with source code. @@ -255,8 +256,9 @@ subresource_fragments = [] # Generate methods for subresources. - for subresname, subresource in methods.get('resources', {}).items(): - subresource_fragments.append(generate_service(service + capitalize_first(subresname), subresource, discdoc)) + if generate_subresources: + for subresname, subresource in methods.get('resources', {}).items(): + subresource_fragments.append(generate_service(service + capitalize_first(subresname), subresource, discdoc)) for methodname, method in methods.get('methods', {}).items(): # Goal: Instantiate the templates for upload and non-upload methods. @@ -439,7 +441,7 @@ for resource, methods in resources.items(): services.append(generate_service(resource, methods, discdoc)) if 'methods' in discdoc: - services.append(generate_service('Global', discdoc, discdoc)) + services.append(generate_service('Global', discdoc, discdoc, generate_subresources=False)) # Generate schema types. structs = [] @@ -459,7 +461,8 @@ # Assemble everything into a file. modname = (discdoc['id'] + '_types').replace(':', '_') - with open(path.join('gen', modname + '.rs'), 'w') as f: + out_path = path.join('gen', modname + '.rs') + with open(out_path, 'w') as f: f.write(RustHeader) f.write(scopes_type) # Render resource structs. @@ -476,6 +479,10 @@ # Render service impls. for s in services: f.write(s) + try: + subprocess.run(['rustfmt', out_path, '--edition=2018']) + except: + return def from_cache(apiId): @@ -554,6 +561,9 @@ if 'error' in discdoc: print('Error while fetching document for', doc['id'], ':', discdoc) return + if 'methods' in discdoc: + #raise NotImplementedError("top-level methods are not yet implemented properly. Please take care.") + pass generate_all(discdoc) return