diff --git a/src/mako/api/lib.rs.mako b/src/mako/api/lib.rs.mako index 734433a757..3a4afbd44c 100644 --- a/src/mako/api/lib.rs.mako +++ b/src/mako/api/lib.rs.mako @@ -95,7 +95,7 @@ pub struct ${hub_type}${ht_params} { _root_url: String, } -impl<'a, ${', '.join(HUB_TYPE_PARAMETERS)}> Hub for ${hub_type}${ht_params} {} +impl<'a, ${', '.join(HUB_TYPE_PARAMETERS)}> cmn::Hub for ${hub_type}${ht_params} {} impl<'a, ${', '.join(HUB_TYPE_PARAMETERS)}> ${hub_type}${ht_params} where ${', '.join(hub_type_bounds())} { diff --git a/src/mako/api/lib/lib.mako b/src/mako/api/lib/lib.mako index 94bc3d51dd..2b9bd1da6f 100644 --- a/src/mako/api/lib/lib.mako +++ b/src/mako/api/lib/lib.mako @@ -6,7 +6,7 @@ find_fattest_resource, build_all_params, pass_through, parts_from_params, REQUEST_MARKER_TRAIT, RESPONSE_MARKER_TRAIT, supports_scopes, to_api_version, to_fqan, METHODS_RESOURCE, ADD_PARAM_MEDIA_EXAMPLE, PROTOCOL_TYPE_INFO, enclose_in, - upload_action_fn, unique_type_name, schema_doc_format, METHODS_BUILDER_MARKER_TRAIT, + upload_action_fn, schema_doc_format, METHODS_BUILDER_MARKER_TRAIT, to_extern_crate_name, rust_doc_sanitize) def pretty_name(name): @@ -89,7 +89,7 @@ It seems there is nothing you can do here ... . sn = singular(canonical_type_name(r)) if sn in schemas: - md_resource = link(md_resource, schema_doc_format(schemas[sn]) % unique_type_name(sn)) + md_resource = link(md_resource, schema_doc_format(schemas[sn]) % sn) %>\ * ${md_resource} * ${put_and(md_methods)} @@ -375,4 +375,4 @@ impl Default for Scope { ${scope_url_to_variant(name, default_url)} } } - \ No newline at end of file + diff --git a/src/mako/api/lib/mbuild.mako b/src/mako/api/lib/mbuild.mako index 07d41532e5..3e30402a92 100644 --- a/src/mako/api/lib/mbuild.mako +++ b/src/mako/api/lib/mbuild.mako @@ -10,7 +10,7 @@ CALL_BUILDER_MARKERT_TRAIT, pass_through, markdown_rust_block, parts_from_params, DELEGATE_PROPERTY_NAME, struct_type_bounds_s, scope_url_to_variant, re_find_replacements, ADD_PARAM_FN, ADD_PARAM_MEDIA_EXAMPLE, upload_action_fn, METHODS_RESOURCE, - method_name_to_variant, unique_type_name, size_to_bytes, method_default_scope, + method_name_to_variant, size_to_bytes, method_default_scope, is_repeated_property, setter_fn_name, ADD_SCOPE_FN, rust_doc_sanitize) def get_parts(part_prop): @@ -70,7 +70,7 @@ ${m.description | rust_doc_sanitize, rust_doc_comment} % endif % if response_schema: /// Please note that due to missing multi-part support on the server side, you will only receive the media, -/// but not the `${unique_type_name(response_schema.id)}` structure that you would usually get. The latter will be a default value. +/// but not the `${response_schema.id}` structure that you would usually get. The latter will be a default value. % endif /// % endif ## supports media download @@ -316,7 +316,7 @@ ${self._setter_fn(resource, method, m, p, part_prop, ThisType, c)}\ test_fn_filter = rust_doc and rust_test_fn_invisible or pass_through if request_value: - request_value_type = unique_type_name(request_value.id) + request_value_type = request_value.id %>\ <%block filter="test_block_filter">\ ${capture(util.test_prelude) | hide_filter}\ @@ -412,7 +412,7 @@ match result { where = '' qualifier = 'pub ' add_args = '' - rtype = 'Result' + rtype = 'cmn::Result' response_schema = method_response(c, m) supports_download = m.get('supportsMediaDownload', False); @@ -420,7 +420,7 @@ match result { if response_schema: if not supports_download: reserved_params = ['alt'] - rtype = 'Result<(hyper::client::Response, %s)>' % (unique_type_name(response_schema.id)) + rtype = 'cmn::Result<(hyper::client::Response, %s)>' % (response_schema.id) mtype_param = 'RS' @@ -430,7 +430,7 @@ match result { if media_params: type_params = '<%s>' % mtype_param qualifier = '' - where = '\n\t\twhere ' + mtype_param + ': ReadSeek' + where = '\n\t\twhere ' + mtype_param + ': cmn::ReadSeek' add_args = (', mut reader: %s, reader_mime_type: mime::Mime' % mtype_param) + ", protocol: &'static str" for p in media_params: if p.protocol == 'simple': @@ -465,7 +465,7 @@ match result { if media_params: max_size = media_params[0].max_size if max_size > 0: - READER_SEEK += "if size > %i {\n\treturn Err(Error::UploadSizeLimitExceeded(size, %i))\n}" % (max_size, max_size) + READER_SEEK += "if size > %i {\n\treturn Err(cmn::Error::UploadSizeLimitExceeded(size, %i))\n}" % (max_size, max_size) special_cases = set() for possible_url in possible_urls: @@ -505,12 +505,13 @@ match result { % endif use std::io::{Read, Seek}; use hyper::header::{ContentType, ContentLength, Authorization, Bearer, UserAgent, Location}; - let mut dd = DefaultDelegate; - let mut dlg: &mut dyn Delegate = match ${delegate} { + use cmn::ToParts; + let mut dd = cmn::DefaultDelegate; + let mut dlg: &mut dyn cmn::Delegate = match ${delegate} { Some(d) => d, None => &mut dd }; - dlg.begin(MethodInfo { id: "${m.id}", + dlg.begin(cmn::MethodInfo { id: "${m.id}", http_method: ${method_name_to_variant(m.httpMethod)} }); let mut params: Vec<(&str, String)> = Vec::with_capacity(${len(params) + len(reserved_params)} + ${paddfields}.len()); <% @@ -557,7 +558,7 @@ match result { for &field in [${', '.join(enclose_in('"', reserved_params + [p.name for p in field_params]))}].iter() { if ${paddfields}.contains_key(field) { ${delegate_finish}(false); - return Err(Error::FieldClash(field)); + return Err(cmn::Error::FieldClash(field)); } } for (name, value) in ${paddfields}.iter() { @@ -620,7 +621,7 @@ else { Some(value) => params.push(("key", value)), None => { ${delegate_finish}(false); - return Err(Error::MissingAPIKey) + return Err(cmn::Error::MissingAPIKey) } } % endif @@ -678,7 +679,7 @@ else { let mut request_value_reader = { let mut value = json::value::to_value(&self.${property(REQUEST_VALUE_PROPERTY_NAME)}).expect("serde to work"); - remove_json_null_values(&mut value); + cmn::remove_json_null_values(&mut value); let mut dst = io::Cursor::new(Vec::with_capacity(128)); json::to_writer(&mut dst, &value).unwrap(); dst @@ -702,7 +703,7 @@ else { Some(token) => token, None => { ${delegate_finish}(false); - return Err(Error::MissingToken(err)) + return Err(cmn::Error::MissingToken(err)) } } } @@ -727,7 +728,7 @@ else { % endif <%block filter="indent_by(resumable_media_param and 4 or 0)">\ % if request_value and simple_media_param: - let mut mp_reader: MultiPartReader = Default::default(); + let mut mp_reader: cmn::MultiPartReader = Default::default(); let (mut body_reader, content_type) = match protocol { "${simple_media_param.protocol}" => { mp_reader.reserve_exact(2); @@ -790,16 +791,16 @@ else { continue; } ${delegate_finish}(false); - return Err(Error::HttpError(err)) + return Err(cmn::Error::HttpError(err)) } Ok(mut res) => { if !res.status.is_success() { let mut json_err = String::new(); res.read_to_string(&mut json_err).unwrap(); - let json_server_error = json::from_str::(&json_err).ok(); - let server_error = json::from_str::(&json_err) - .or_else(|_| json::from_str::(&json_err).map(|r| r.error)) + let json_server_error = json::from_str::(&json_err).ok(); + let server_error = json::from_str::(&json_err) + .or_else(|_| json::from_str::(&json_err).map(|r| r.error)) .ok(); if let oauth2::Retry::After(d) = dlg.http_failure(&res, @@ -809,9 +810,9 @@ else { continue; } ${delegate_finish}(false); - return match json::from_str::(&json_err){ - Err(_) => Err(Error::Failure(res)), - Ok(serr) => Err(Error::BadRequest(serr)) + return match json::from_str::(&json_err){ + Err(_) => Err(cmn::Error::Failure(res)), + Ok(serr) => Err(cmn::Error::BadRequest(serr)) } } % if resumable_media_param: @@ -840,12 +841,12 @@ else { match upload_result { None => { ${delegate_finish}(false); - return Err(Error::Cancelled) + return Err(cmn::Error::Cancelled) } Some(Err(err)) => { ## Do not ask the delgate again, as it was asked by the helper ! ${delegate_finish}(false); - return Err(Error::HttpError(err)) + return Err(cmn::Error::HttpError(err)) } ## Now the result contains the actual resource, if any ... it will be ## decoded next @@ -855,7 +856,7 @@ else { ## delegate was called in upload() already - don't tell him again dlg.store_upload_url(None); ${delegate_finish}(false); - return Err(Error::Failure(res)) + return Err(cmn::Error::Failure(res)) } } } @@ -874,7 +875,7 @@ if enable_resource_parsing \ Ok(decoded) => (res, decoded), Err(err) => { dlg.response_json_decode_error(&json_response, &err); - return Err(Error::JsonDecodeError(json_response, err)); + return Err(cmn::Error::JsonDecodeError(json_response, err)); } } }\ @@ -900,7 +901,7 @@ if enable_resource_parsing \ /// * *${split_camelcase_s(item_name)}*: ${isinstance(item, (list, tuple)) and put_and(enclose_in("'", item)) or str(item)} % endfor pub fn ${upload_action_fn(api.terms.upload_action, p.type.suffix)}<${mtype_param}>(self, ${p.type.arg_name}: ${mtype_param}, mime_type: mime::Mime) -> ${rtype} - where ${mtype_param}: ReadSeek { + where ${mtype_param}: cmn::ReadSeek { self.${api.terms.action}(${p.type.arg_name}, mime_type, "${p.protocol}") } % endfor diff --git a/src/mako/api/lib/rbuild.mako b/src/mako/api/lib/rbuild.mako index f87d3378ae..0f5be1e9d2 100644 --- a/src/mako/api/lib/rbuild.mako +++ b/src/mako/api/lib/rbuild.mako @@ -95,6 +95,7 @@ impl${rb_params} ${ThisType} { % endfor % endif pub fn ${mangle_ident(a)}${type_params}(&self${method_args}) -> ${RType}${mb_tparams} { + use cmn::ToParts; % if part_prop and request_value: let parts = ${mangle_ident(REQUEST_VALUE_PROPERTY_NAME)}.to_parts(); % endif @@ -120,4 +121,4 @@ impl${rb_params} ${ThisType} { } % endfor ## for each activity } - \ No newline at end of file + diff --git a/src/mako/api/lib/schema.mako b/src/mako/api/lib/schema.mako index 0484b5c40b..3288b24552 100644 --- a/src/mako/api/lib/schema.mako +++ b/src/mako/api/lib/schema.mako @@ -1,7 +1,7 @@ <%! from util import (schema_markers, rust_doc_comment, mangle_ident, to_rust_type, put_and, IO_TYPES, activity_split, enclose_in, REQUEST_MARKER_TRAIT, mb_type, indent_all_but_first_by, - NESTED_TYPE_SUFFIX, RESPONSE_MARKER_TRAIT, split_camelcase_s, METHODS_RESOURCE, unique_type_name, + NESTED_TYPE_SUFFIX, RESPONSE_MARKER_TRAIT, split_camelcase_s, METHODS_RESOURCE, PART_MARKER_TRAIT, canonical_type_name, TO_PARTS_MARKER, UNUSED_TYPE_MARKER, is_schema_with_optionals, rust_doc_sanitize) %>\ @@ -9,7 +9,7 @@ ################################################################################################################### ################################################################################################################### <%def name="_new_object(s, properties, c, allow_optionals)">\ -<% struct = 'pub struct ' + unique_type_name(s.id) %>\ +<% struct = 'pub struct ' + s.id %>\ % if properties: ${struct} { % for pn, p in properties.iteritems(): @@ -24,7 +24,7 @@ ${struct} { ${struct}(${to_rust_type(schemas, s.id, NESTED_TYPE_SUFFIX, s, allow_optionals=allow_optionals)}); % elif 'variant' in s: <% - et = unique_type_name(s.id) + et = s.id variant_type = lambda p: canonical_type_name(p.type_value) %>\ pub enum ${et} { @@ -71,7 +71,7 @@ ${struct} { _never_set: Option } if s.type == 'any': traits.remove('Default') - s_type = unique_type_name(s.id) + s_type = s.id %>\ <%block filter="rust_doc_sanitize, rust_doc_comment">\ ${doc(s, c)}\ diff --git a/src/mako/lib/cli.py b/src/mako/lib/cli.py index 3c73494b93..0d34fa9970 100644 --- a/src/mako/lib/cli.py +++ b/src/mako/lib/cli.py @@ -211,7 +211,7 @@ def to_cli_schema(c, schema): # documentation only def cli_schema_to_yaml(schema, prefix=''): if not prefix: - o = '%s%s:\n' % (prefix, util.unique_type_name(schema.id)) + o = '%s%s:\n' % (prefix, schema.id) else: o = '' prefix += ' ' diff --git a/src/mako/lib/util.py b/src/mako/lib/util.py index 6d03c89732..8faede7a71 100644 --- a/src/mako/lib/util.py +++ b/src/mako/lib/util.py @@ -62,21 +62,19 @@ ADD_PARAM_MEDIA_EXAMPLE = "." + ADD_PARAM_FN + '("alt", "media")' SPACES_PER_TAB = 4 NESTED_TYPE_SUFFIX = 'item' -DELEGATE_TYPE = 'Delegate' +DELEGATE_TYPE = 'cmn::Delegate' REQUEST_PRIORITY = 100 -REQUEST_MARKER_TRAIT = 'RequestValue' -RESPONSE_MARKER_TRAIT = 'ResponseResult' -RESOURCE_MARKER_TRAIT = 'Resource' -CALL_BUILDER_MARKERT_TRAIT = 'CallBuilder' -METHODS_BUILDER_MARKER_TRAIT = 'MethodsBuilder' -PART_MARKER_TRAIT = 'Part' -NESTED_MARKER_TRAIT = 'NestedType' +REQUEST_MARKER_TRAIT = 'cmn::RequestValue' +RESPONSE_MARKER_TRAIT = 'cmn::ResponseResult' +RESOURCE_MARKER_TRAIT = 'cmn::Resource' +CALL_BUILDER_MARKERT_TRAIT = 'cmn::CallBuilder' +METHODS_BUILDER_MARKER_TRAIT = 'cmn::MethodsBuilder' +PART_MARKER_TRAIT = 'cmn::Part' +NESTED_MARKER_TRAIT = 'cmn::NestedType' REQUEST_VALUE_PROPERTY_NAME = 'request' DELEGATE_PROPERTY_NAME = 'delegate' -TO_PARTS_MARKER = 'ToParts' -UNUSED_TYPE_MARKER = 'UnusedType' - -RESERVED_TYPES = set(("Result", RESOURCE_MARKER_TRAIT, "Error")) +TO_PARTS_MARKER = 'cmn::ToParts' +UNUSED_TYPE_MARKER = 'cmn::UnusedType' PROTOCOL_TYPE_INFO = { 'simple' : { @@ -328,7 +326,7 @@ def _assure_unique_type_name(schemas, tn): if tn in schemas: tn += 'Nested' assert tn not in schemas - return unique_type_name(tn) + return tn # map a json type to an rust type # sn = schema name @@ -349,7 +347,7 @@ def to_rust_type(schemas, sn, pn, t, allow_optionals=True, _is_recursive=False): def wrap_type(tn): if allow_optionals: - tn = "Option<%s>" % unique_type_name(tn) + tn = "Option<%s>" % tn return tn # unconditionally handle $ref types, which should point to another schema. @@ -359,12 +357,12 @@ def to_rust_type(schemas, sn, pn, t, allow_optionals=True, _is_recursive=False): # usually is on on the first call, and off when recursion is involved. tn = t[TREF] if not _is_recursive and tn == sn: - tn = 'Option>' % unique_type_name(tn) + tn = 'Option>' % tn return wrap_type(tn) try: rust_type = TYPE_MAP[t['type']] if t['type'] == 'array': - return wrap_type("%s<%s>" % (rust_type, unique_type_name((nested_type(t))))) + return wrap_type("%s<%s>" % (rust_type, (nested_type(t)))) elif t['type'] == 'object': if is_map_prop(t): return wrap_type("%s" % (rust_type, nested_type(t))) @@ -941,12 +939,6 @@ def mb_type_params_s(m): def mb_additional_type_params(m): return [] -# check type_name against a list of reserved types, and return a possibly rename type_name to prevent a clash -def unique_type_name(type_name): - if type_name in RESERVED_TYPES: - type_name += 'Type' - return type_name - # return type name for a method on the given resource def mb_type(r, m): return "%s%sCall" % (singular(canonical_type_name(r)), dot_sep_to_canonical_type_name(m))