gapic-generator 0.11.0 → 0.45.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +299 -0
- data/CONTRIBUTING.md +1 -1
- data/README.md +71 -37
- data/bin/protoc-gen-ruby_gapic +2 -2
- data/lib/gapic/file_formatter.rb +23 -19
- data/lib/gapic/formatting_utils.rb +22 -9
- data/lib/gapic/gem_builder.rb +15 -17
- data/lib/gapic/generator/version.rb +1 -1
- data/lib/gapic/generators/base_generator.rb +6 -4
- data/lib/gapic/generators/default_generator.rb +70 -34
- data/lib/gapic/generators/default_generator_parameters.rb +9 -3
- data/lib/gapic/grpc_service_config/parser.rb +2 -2
- data/lib/gapic/model/api_metadata.rb +173 -0
- data/lib/gapic/model/method/http_annotation.rb +158 -60
- data/lib/gapic/model/method/lro.rb +8 -5
- data/lib/gapic/model/method/routing.rb +3 -18
- data/lib/gapic/model/mixins.rb +76 -10
- data/lib/gapic/model/service/nonstandard_lro_provider.rb +10 -11
- data/lib/gapic/package_snippets.rb +159 -0
- data/lib/gapic/path_pattern/parser.rb +11 -2
- data/lib/gapic/path_pattern/pattern.rb +18 -1
- data/lib/gapic/path_pattern/segment.rb +11 -4
- data/lib/gapic/presenters/enum_presenter.rb +14 -0
- data/lib/gapic/presenters/enum_value_presenter.rb +4 -1
- data/lib/gapic/presenters/field_presenter.rb +78 -21
- data/lib/gapic/presenters/gem_presenter.rb +109 -35
- data/lib/gapic/presenters/message_presenter.rb +15 -0
- data/lib/gapic/presenters/method/http_binding_presenter.rb +128 -0
- data/lib/gapic/presenters/method/rest_pagination_info.rb +25 -16
- data/lib/gapic/presenters/method_presenter.rb +109 -35
- data/lib/gapic/presenters/method_rest_presenter.rb +70 -137
- data/lib/gapic/presenters/package_presenter.rb +63 -18
- data/lib/gapic/presenters/resource_presenter.rb +9 -3
- data/lib/gapic/presenters/service/lro_client_presenter.rb +14 -14
- data/lib/gapic/presenters/service/mixin_client_presenter.rb +89 -0
- data/lib/gapic/presenters/service/sub_client_presenter.rb +84 -0
- data/lib/gapic/presenters/service_presenter.rb +183 -31
- data/lib/gapic/presenters/service_rest_presenter.rb +180 -27
- data/lib/gapic/presenters/snippet/client_call_presenter.rb +82 -0
- data/lib/gapic/presenters/snippet/client_initialization_presenter.rb +87 -0
- data/lib/gapic/presenters/snippet/declaration_presenter.rb +91 -0
- data/lib/gapic/presenters/snippet/expression_presenter.rb +135 -0
- data/lib/gapic/presenters/snippet/iteration_presenter.rb +118 -0
- data/lib/gapic/presenters/snippet/parameter_presenter.rb +67 -0
- data/lib/gapic/presenters/snippet/request_initialization_presenters.rb +202 -0
- data/lib/gapic/presenters/snippet/response_handling_presenters.rb +329 -0
- data/lib/gapic/presenters/snippet/statement_presenter.rb +134 -0
- data/lib/gapic/presenters/snippet/type_presenter.rb +98 -0
- data/lib/gapic/presenters/snippet_presenter.rb +199 -10
- data/lib/gapic/presenters.rb +2 -0
- data/lib/gapic/runner.rb +1 -1
- data/lib/gapic/schema/api.rb +49 -3
- data/lib/gapic/schema/loader.rb +67 -22
- data/lib/gapic/schema/parameter_schema.rb +8 -8
- data/lib/gapic/schema/proto_tools.rb +193 -0
- data/lib/gapic/schema/request_param_parser.rb +5 -7
- data/lib/gapic/schema/service_config_parser.rb +38 -4
- data/lib/gapic/schema/wrappers.rb +192 -31
- data/lib/gapic/uri_template/parser.rb +15 -7
- data/lib/google/cloud/tools/snippetgen/configlanguage/v1/snippet_config_language_pb.rb +104 -0
- data/lib/google/cloud/tools/snippetgen/snippetindex/v1/snippet_index_pb.rb +58 -0
- data/lib/google/protobuf/compiler/plugin_pb.rb +47 -0
- data/templates/default/binding_override.text.erb +6 -0
- data/templates/default/gem/gemfile.text.erb +12 -0
- data/templates/default/gem/{gemspec.erb → gemspec.text.erb} +3 -11
- data/templates/default/gem/{readme.erb → readme.text.erb} +10 -6
- data/templates/default/gem/{rubocop.erb → rubocop.text.erb} +3 -0
- data/templates/default/gem/{test_helper.erb → test_helper.text.erb} +4 -2
- data/templates/default/gem/toys.text.erb +12 -0
- data/templates/default/helpers/default_helper.rb +33 -1
- data/templates/default/lib/_binding_override.text.erb +49 -0
- data/templates/default/lib/{_package.erb → _package.text.erb} +6 -9
- data/templates/default/lib/_package_rest.text.erb +24 -0
- data/templates/default/lib/{_service.erb → _service.text.erb} +11 -23
- data/templates/default/lib/package/_self_configure.text.erb +16 -0
- data/templates/default/lib/package/_self_configure_defaults.text.erb +13 -0
- data/templates/default/lib/package/self_configure/_binding_default.text.erb +15 -0
- data/templates/default/lib/rest/_rest.text.erb +46 -0
- data/templates/default/package_rest.text.erb +6 -0
- data/templates/default/proto_docs/_deprecated.text.erb +9 -0
- data/templates/default/proto_docs/{_enum.erb → _enum.text.erb} +1 -0
- data/templates/default/proto_docs/{_message.erb → _message.text.erb} +2 -0
- data/templates/default/service/client/{_client.erb → _client.text.erb} +60 -12
- data/templates/default/service/client/{_config.erb → _config.text.erb} +39 -8
- data/templates/default/service/client/{_operations.erb → _operations.text.erb} +24 -3
- data/templates/default/service/client/method/{_def.erb → _def.text.erb} +2 -2
- data/templates/default/service/client/method/def/{_options_defaults.erb → _options_defaults.text.erb} +2 -1
- data/templates/default/service/client/method/def/_request_normal.text.erb +18 -0
- data/templates/default/service/client/method/def/_request_streaming.text.erb +23 -0
- data/templates/default/service/client/method/def/{_response.erb → _response.text.erb} +2 -0
- data/templates/default/service/client/method/def/{_response_nonstandard_lro.erb → _response_nonstandard_lro.text.erb} +1 -1
- data/templates/default/service/client/method/def/_response_normal.text.erb +4 -0
- data/templates/default/service/client/method/def/{_response_normal.erb → _response_normal_lro.text.erb} +1 -3
- data/templates/default/service/client/method/def/{_response_paged.erb → _response_paged.text.erb} +1 -1
- data/templates/default/service/client/method/docs/{_request_normal.erb → _request_normal.text.erb} +1 -1
- data/templates/default/service/client/method/docs/_snippets.text.erb +6 -0
- data/templates/default/service/client/resource/_def.text.erb +7 -0
- data/templates/default/service/nonstandard_lro.text.erb +6 -0
- data/templates/default/service/rest/client/{_client.erb → _client.text.erb} +82 -13
- data/templates/default/service/rest/client/_config.text.erb +178 -0
- data/templates/default/service/rest/client/_operations.text.erb +124 -0
- data/templates/default/service/rest/client/method/{_def.erb → _def.text.erb} +7 -1
- data/templates/default/service/rest/client/method/def/{_options_defaults.erb → _options_defaults.text.erb} +8 -3
- data/templates/default/service/rest/client/method/def/{_response.erb → _response.text.erb} +4 -0
- data/templates/default/service/rest/client/method/def/{_response_nonstandard_lro.erb → _response_nonstandard_lro.text.erb} +5 -4
- data/templates/default/service/rest/client/method/def/_response_normal.text.erb +5 -0
- data/templates/default/service/rest/client/method/def/_response_normal_lro.text.erb +7 -0
- data/templates/default/service/rest/client/method/def/_response_paged.text.erb +7 -0
- data/templates/default/service/rest/client/method/def/_response_server_streaming.text.erb +11 -0
- data/templates/default/service/rest/client/method/docs/{_request.erb → _request.text.erb} +1 -3
- data/templates/default/service/rest/client/method/docs/_result.text.erb +10 -0
- data/templates/default/service/rest/client/method/docs/_snippets.text.erb +6 -0
- data/templates/default/service/{nonstandard_lro.erb → rest/nonstandard_lro.text.erb} +1 -1
- data/templates/default/service/rest/operations.text.erb +6 -0
- data/templates/default/service/rest/service_stub/_service_stub.text.erb +63 -0
- data/templates/default/service/rest/service_stub/grpc_transcoding_method/_def.text.erb +37 -0
- data/templates/default/service/rest/service_stub/method/_def.text.erb +35 -0
- data/templates/default/service/rest/service_stub/method/def/_response.text.erb +37 -0
- data/templates/default/service/rest/test/{client.erb → client.text.erb} +3 -3
- data/templates/default/service/rest/test/method/_assert_response.text.erb +2 -0
- data/templates/default/service/rest/test/method/{_configure.erb → _configure.text.erb} +3 -2
- data/templates/default/service/rest/test/method/_normal.text.erb +60 -0
- data/templates/default/service/rest/test/method/_server.text.erb +60 -0
- data/templates/default/service/rest/test/method/{_setup.erb → _setup.text.erb} +26 -10
- data/templates/default/service/test/{_resource.erb → _resource.text.erb} +1 -1
- data/templates/default/service/test/{client.erb → client.text.erb} +3 -2
- data/templates/default/service/test/client_paths.text.erb +33 -0
- data/templates/default/service/test/method/{_bidi.erb → _bidi.text.erb} +1 -1
- data/templates/default/service/test/method/{_client.erb → _client.text.erb} +1 -1
- data/templates/default/service/test/method/{_configure.erb → _configure.text.erb} +2 -1
- data/templates/default/service/test/method/{_normal.erb → _normal.text.erb} +1 -1
- data/templates/default/service/test/method/{_server.erb → _server.text.erb} +1 -1
- data/templates/default/service/test/method/{_setup.erb → _setup.text.erb} +19 -2
- data/templates/default/snippets/{gemfile.erb → gemfile.text.erb} +2 -2
- data/templates/default/snippets/snippet/_body.text.erb +24 -0
- data/templates/default/snippets/snippet/_inline.text.erb +11 -0
- data/templates/default/snippets/snippet/_standalone.text.erb +25 -0
- data/templates/default/snippets/{standalone.erb → standalone.text.erb} +1 -1
- metadata +198 -273
- data/lib/google/api/annotations.pb.rb +0 -39
- data/lib/google/api/auth.pb.rb +0 -75
- data/lib/google/api/backend.pb.rb +0 -59
- data/lib/google/api/billing.pb.rb +0 -53
- data/lib/google/api/client.pb.rb +0 -43
- data/lib/google/api/context.pb.rb +0 -47
- data/lib/google/api/control.pb.rb +0 -38
- data/lib/google/api/documentation.pb.rb +0 -56
- data/lib/google/api/endpoint.pb.rb +0 -42
- data/lib/google/api/field_behavior.pb.rb +0 -51
- data/lib/google/api/http.pb.rb +0 -60
- data/lib/google/api/label.pb.rb +0 -49
- data/lib/google/api/launch_stage.pb.rb +0 -37
- data/lib/google/api/log.pb.rb +0 -47
- data/lib/google/api/logging.pb.rb +0 -48
- data/lib/google/api/metric.pb.rb +0 -90
- data/lib/google/api/monitored_resource.pb.rb +0 -68
- data/lib/google/api/monitoring.pb.rb +0 -48
- data/lib/google/api/quota.pb.rb +0 -63
- data/lib/google/api/resource.pb.rb +0 -80
- data/lib/google/api/routing.pb.rb +0 -58
- data/lib/google/api/service.pb.rb +0 -90
- data/lib/google/api/source_info.pb.rb +0 -44
- data/lib/google/api/system_parameter.pb.rb +0 -51
- data/lib/google/api/usage.pb.rb +0 -47
- data/lib/google/cloud/extended_operations.pb.rb +0 -57
- data/lib/google/longrunning/operations.pb.rb +0 -115
- data/lib/google/protobuf/any.pb.rb +0 -40
- data/lib/google/protobuf/api.pb.rb +0 -69
- data/lib/google/protobuf/compiler/plugin.pb.rb +0 -79
- data/lib/google/protobuf/descriptor.pb.rb +0 -360
- data/lib/google/protobuf/duration.pb.rb +0 -41
- data/lib/google/protobuf/empty.pb.rb +0 -36
- data/lib/google/protobuf/source_context.pb.rb +0 -39
- data/lib/google/protobuf/struct.pb.rb +0 -65
- data/lib/google/protobuf/type.pb.rb +0 -128
- data/lib/google/protobuf/wrappers.pb.rb +0 -80
- data/lib/google/rpc/status.pb.rb +0 -46
- data/templates/default/gem/gemfile.erb +0 -4
- data/templates/default/lib/rest/_rest.erb +0 -9
- data/templates/default/service/client/method/def/_request_normal.erb +0 -4
- data/templates/default/service/client/method/def/_request_streaming.erb +0 -9
- data/templates/default/service/client/method/docs/_deprecated.erb +0 -5
- data/templates/default/service/client/method/docs/_snippets.erb +0 -6
- data/templates/default/service/client/resource/_def.erb +0 -6
- data/templates/default/service/rest/client/_config.erb +0 -122
- data/templates/default/service/rest/client/method/def/_response_normal.erb +0 -6
- data/templates/default/service/rest/client/method/def/_response_paged.erb +0 -7
- data/templates/default/service/rest/client/method/docs/_result.erb +0 -6
- data/templates/default/service/rest/service_stub/_service_stub.erb +0 -25
- data/templates/default/service/rest/service_stub/grpc_transcoding_method/_def.erb +0 -24
- data/templates/default/service/rest/service_stub/method/_def.erb +0 -20
- data/templates/default/service/rest/service_stub/method/def/_response.erb +0 -17
- data/templates/default/service/rest/test/method/_assert_response.erb +0 -2
- data/templates/default/service/rest/test/method/_normal.erb +0 -71
- data/templates/default/service/test/client_paths.erb +0 -15
- data/templates/default/snippets/snippet/_structure.erb +0 -71
- /data/gem_templates/{binary.erb → binary.text.erb} +0 -0
- /data/gem_templates/{dockerfile.erb → dockerfile.text.erb} +0 -0
- /data/gem_templates/{entrypoint.erb → entrypoint.text.erb} +0 -0
- /data/gem_templates/{gapic_sh.erb → gapic_sh.text.erb} +0 -0
- /data/gem_templates/{gemfile.erb → gemfile.text.erb} +0 -0
- /data/gem_templates/{gemspec.erb → gemspec.text.erb} +0 -0
- /data/gem_templates/{generator.erb → generator.text.erb} +0 -0
- /data/gem_templates/{gitignore.erb → gitignore.text.erb} +0 -0
- /data/gem_templates/{rakefile.erb → rakefile.text.erb} +0 -0
- /data/gem_templates/{readme.erb → readme.text.erb} +0 -0
- /data/gem_templates/{rubocop.erb → rubocop.text.erb} +0 -0
- /data/gem_templates/shared/{_header.erb → _header.text.erb} +0 -0
- /data/gem_templates/shared/{_license.erb → _license.text.erb} +0 -0
- /data/gem_templates/shared/{_warning.erb → _warning.text.erb} +0 -0
- /data/gem_templates/{test_generator.erb → test_generator.text.erb} +0 -0
- /data/gem_templates/{test_helper.erb → test_helper.text.erb} +0 -0
- /data/gem_templates/{version.erb → version.text.erb} +0 -0
- /data/templates/default/gem/{_version.erb → _version.text.erb} +0 -0
- /data/templates/default/gem/{changelog.erb → changelog.text.erb} +0 -0
- /data/templates/default/gem/{entrypoint.erb → entrypoint.text.erb} +0 -0
- /data/templates/default/gem/{gapic_metadata_json.erb → gapic_metadata_json.text.erb} +0 -0
- /data/templates/default/gem/{gitignore.erb → gitignore.text.erb} +0 -0
- /data/templates/default/gem/{license.erb → license.text.erb} +0 -0
- /data/templates/default/gem/{rakefile.erb → rakefile.text.erb} +0 -0
- /data/templates/default/gem/{version.erb → version.text.erb} +0 -0
- /data/templates/default/gem/{yardopts.erb → yardopts.text.erb} +0 -0
- /data/templates/default/layouts/{_ruby.erb → _ruby.text.erb} +0 -0
- /data/templates/default/{package.erb → package.text.erb} +0 -0
- /data/templates/default/proto_docs/{_proto_file.erb → _proto_file.text.erb} +0 -0
- /data/templates/default/proto_docs/{proto_file.erb → proto_file.text.erb} +0 -0
- /data/templates/default/proto_docs/{readme.erb → readme.text.erb} +0 -0
- /data/templates/default/service/{_helpers.erb → _helpers.text.erb} +0 -0
- /data/templates/default/service/client/{_credentials.erb → _credentials.text.erb} +0 -0
- /data/templates/default/service/client/{_nonstandard_lro.erb → _nonstandard_lro.text.erb} +0 -0
- /data/templates/default/service/client/{_paths.erb → _paths.text.erb} +0 -0
- /data/templates/default/service/client/{_requires.erb → _requires.text.erb} +0 -0
- /data/templates/default/service/client/{_resource.erb → _resource.text.erb} +0 -0
- /data/templates/default/service/client/{_self_configure.erb → _self_configure.text.erb} +0 -0
- /data/templates/default/service/client/{_self_configure_defaults.erb → _self_configure_defaults.text.erb} +0 -0
- /data/templates/default/service/client/method/def/{_request.erb → _request.text.erb} +0 -0
- /data/templates/default/service/client/method/def/{_rescue.erb → _rescue.text.erb} +0 -0
- /data/templates/default/service/client/method/def/{_routing_params.erb → _routing_params.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_error.erb → _error.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_request.erb → _request.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_request_field.erb → _request_field.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_request_streaming.erb → _request_streaming.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_response.erb → _response.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_sample.erb → _sample.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_sample_response.erb → _sample_response.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/{_samples.erb → _samples.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/request_field/{_arg.erb → _arg.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/request_field/{_hash.erb → _hash.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/sample_response/{_comment.erb → _comment.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/sample_response/{_define.erb → _define.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/sample_response/{_loop.erb → _loop.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/sample_response/{_print.erb → _print.text.erb} +0 -0
- /data/templates/default/service/client/method/docs/sample_response/{_write_file.erb → _write_file.text.erb} +0 -0
- /data/templates/default/service/client/resource/{_doc.erb → _doc.text.erb} +0 -0
- /data/templates/default/service/client/resource/{_multi.erb → _multi.text.erb} +0 -0
- /data/templates/default/service/client/resource/{_single.erb → _single.text.erb} +0 -0
- /data/templates/default/service/{client.erb → client.text.erb} +0 -0
- /data/templates/default/service/{credentials.erb → credentials.text.erb} +0 -0
- /data/templates/default/service/{operations.erb → operations.text.erb} +0 -0
- /data/templates/default/service/{paths.erb → paths.text.erb} +0 -0
- /data/templates/default/service/rest/client/method/def/{_rescue.erb → _rescue.text.erb} +0 -0
- /data/templates/default/service/rest/client/method/docs/{_error.erb → _error.text.erb} +0 -0
- /data/templates/default/service/rest/{client.erb → client.text.erb} +0 -0
- /data/templates/default/service/rest/{grpc_transcoding.erb → grpc_transcoding.text.erb} +0 -0
- /data/templates/default/service/rest/service_stub/grpc_transcoding_method/def/{_query_string_param.erb → _query_string_param.text.erb} +0 -0
- /data/templates/default/service/rest/service_stub/method/def/{_request.erb → _request.text.erb} +0 -0
- /data/templates/default/service/rest/{service_stub.erb → service_stub.text.erb} +0 -0
- /data/templates/default/service/{rest.erb → rest.text.erb} +0 -0
- /data/templates/default/service/test/{client_operations.erb → client_operations.text.erb} +0 -0
- /data/templates/default/service/test/method/{_assert_response.erb → _assert_response.text.erb} +0 -0
- /data/templates/default/service/test/{smoke.erb → smoke.text.erb} +0 -0
- /data/templates/default/{service.erb → service.text.erb} +0 -0
- /data/templates/default/shared/{_header.erb → _header.text.erb} +0 -0
- /data/templates/default/shared/{_license.erb → _license.text.erb} +0 -0
- /data/templates/default/shared/{_warning.erb → _warning.text.erb} +0 -0
@@ -0,0 +1,193 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2023 Google LLC
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require "stringio"
|
18
|
+
|
19
|
+
module Gapic
|
20
|
+
module Schema
|
21
|
+
##
|
22
|
+
# @private
|
23
|
+
#
|
24
|
+
# A set of logic dealing with parsing raw proto data. This is unfortunately
|
25
|
+
# necessary for getting options extension information from proto
|
26
|
+
# descriptors, because the google-protobuf library implementation is
|
27
|
+
# incomplete. (Specifically, it does not expose Ruby interfaces for Service
|
28
|
+
# and Method descriptors, the objects that normally surface extended
|
29
|
+
# options; see https://github.com/protocolbuffers/protobuf/issues/14891.)
|
30
|
+
#
|
31
|
+
# We hope this code will be temporary until the above protobuf features are
|
32
|
+
# available. In the meantime, we make it private.
|
33
|
+
#
|
34
|
+
module ProtoTools
|
35
|
+
class << self
|
36
|
+
##
|
37
|
+
# Parse through an options object looking for specific fields.
|
38
|
+
#
|
39
|
+
# The fields should be provided as a hash mapping the option name to
|
40
|
+
# an array of the form `[id, type, flags...]` where the ID is the field
|
41
|
+
# number, the type is the protobuf message class or one of the symbols
|
42
|
+
# `:string`, `:bool`, `:enum`, and currently the only flag supported is
|
43
|
+
# `:repeated`.
|
44
|
+
#
|
45
|
+
# Returns a hash mapping option names found to their values. Repeated
|
46
|
+
# values are represented as arrays (not as protobuf repeated values).
|
47
|
+
#
|
48
|
+
def parse_options_extensions options, extension_config
|
49
|
+
return {} unless options
|
50
|
+
return options.dup.delete_if { |k, _v| !extension_config.key? k } if options.is_a? Hash
|
51
|
+
bytes = options.class.encode options
|
52
|
+
return {} if bytes.empty?
|
53
|
+
option_data_by_id = build_option_data_by_id extension_config
|
54
|
+
results = build_default_results extension_config
|
55
|
+
walk_bytes bytes do |id, _wire_type, data|
|
56
|
+
option_data = option_data_by_id[id]
|
57
|
+
next unless option_data
|
58
|
+
name = option_data[0]
|
59
|
+
type = option_data[1]
|
60
|
+
results[name] =
|
61
|
+
if option_data[2].include? :repeated
|
62
|
+
decode_repeated data, type, results[name]
|
63
|
+
else
|
64
|
+
decode_data data, type
|
65
|
+
end
|
66
|
+
end
|
67
|
+
results
|
68
|
+
end
|
69
|
+
|
70
|
+
##
|
71
|
+
# Given a byte string of data, parse through it and yield each record
|
72
|
+
# as the field number, wire type number, and data. The data is either
|
73
|
+
# an integer (for VARINT) or byte array (for LEN). I64 and I32 records
|
74
|
+
# are skipped.
|
75
|
+
#
|
76
|
+
def walk_bytes bytes
|
77
|
+
io = StringIO.new bytes
|
78
|
+
until io.eof?
|
79
|
+
tag = read_varint io
|
80
|
+
id = tag >> 3
|
81
|
+
wire_type = tag & 7
|
82
|
+
case wire_type
|
83
|
+
when 0 # VARINT
|
84
|
+
data = read_varint io
|
85
|
+
yield id, wire_type, data
|
86
|
+
when 1 # I64
|
87
|
+
# Skip
|
88
|
+
io.read 8
|
89
|
+
when 2 # LEN
|
90
|
+
len = read_varint io
|
91
|
+
data = io.read len
|
92
|
+
yield id, wire_type, data
|
93
|
+
when 5 # I32
|
94
|
+
# Skip
|
95
|
+
io.read 4
|
96
|
+
else
|
97
|
+
raise "Wire type #{wire_type} not supported (id = #{id})"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
##
|
103
|
+
# Read and return a single VARINT from the byte stream
|
104
|
+
#
|
105
|
+
def read_varint io
|
106
|
+
acc = 0
|
107
|
+
shift = 0
|
108
|
+
loop do
|
109
|
+
byte = io.getbyte
|
110
|
+
acc += ((byte & 0x7f) << shift)
|
111
|
+
shift += 7
|
112
|
+
break if byte < 0x80
|
113
|
+
end
|
114
|
+
acc
|
115
|
+
end
|
116
|
+
|
117
|
+
##
|
118
|
+
# Given a data and type, return a decoded form of the data.
|
119
|
+
# If the type is `:string`, the data must be a bytestring and is
|
120
|
+
# returned as is. If the type is `:enum`, the data must be an integer
|
121
|
+
# and is returned as is. If the type is `:bool`, the data must be an
|
122
|
+
# integer and is converted to a boolean. If the type is a protobuf
|
123
|
+
# message class, the data must be a bytestring and is decoded. Any
|
124
|
+
# other type is not supported and results in an exception.
|
125
|
+
#
|
126
|
+
def decode_data data, type
|
127
|
+
case type
|
128
|
+
when :string, :enum
|
129
|
+
data
|
130
|
+
when :bool
|
131
|
+
!data.zero?
|
132
|
+
when ::Class
|
133
|
+
type.decode data
|
134
|
+
else
|
135
|
+
raise "Type #{type} not supported"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
##
|
140
|
+
# Given a data and a repeated type, return a decoded form of the data
|
141
|
+
# as an array. Supports repeated `:string`, `:enum`, and protobuf
|
142
|
+
# message class types. Any other type results in an exception.
|
143
|
+
#
|
144
|
+
def decode_repeated data, type, acc = nil
|
145
|
+
acc ||= []
|
146
|
+
case type
|
147
|
+
when :string
|
148
|
+
acc << data
|
149
|
+
when :enum
|
150
|
+
if data.is_a? ::String
|
151
|
+
io = StringIO.new data
|
152
|
+
acc << read_varint(io) until io.eof?
|
153
|
+
else
|
154
|
+
acc << data
|
155
|
+
end
|
156
|
+
when ::Class
|
157
|
+
acc << type.decode(data)
|
158
|
+
else
|
159
|
+
raise "Type #{type} not supported"
|
160
|
+
end
|
161
|
+
acc
|
162
|
+
end
|
163
|
+
|
164
|
+
private
|
165
|
+
|
166
|
+
# @private
|
167
|
+
# Internal method to build a hash of default results
|
168
|
+
def build_default_results extension_config
|
169
|
+
extension_config.to_h do |name, config|
|
170
|
+
default =
|
171
|
+
if config[2..].include? :repeated
|
172
|
+
[]
|
173
|
+
else
|
174
|
+
case config[1]
|
175
|
+
when :enum
|
176
|
+
0
|
177
|
+
when :string
|
178
|
+
""
|
179
|
+
end
|
180
|
+
end
|
181
|
+
[name, default]
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
# @private
|
186
|
+
# Internal method to build a hash keyed by id
|
187
|
+
def build_option_data_by_id extension_config
|
188
|
+
extension_config.to_h { |name, config| [config[0], [name, config[1], config[2..]]] }
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
@@ -100,9 +100,8 @@ module Gapic
|
|
100
100
|
# @return [String,Array<String>,Hash{String => String}]
|
101
101
|
def parse_validate_param_value param_type, param_name_input, param_config_name, value_str, error_output
|
102
102
|
if param_type == :bool && !["true", "false"].include?(unescape(value_str))
|
103
|
-
error_str = "WARNING: parameter #{param_name_input} (recognised as bool " \
|
104
|
-
|
105
|
-
"invalid value. Value should be either 'true' or 'false'."
|
103
|
+
error_str = "WARNING: parameter #{param_name_input} (recognised as bool #{param_config_name}) will be " \
|
104
|
+
"discarded because of invalid value. Value should be either 'true' or 'false'."
|
106
105
|
error_output&.puts error_str
|
107
106
|
end
|
108
107
|
|
@@ -113,10 +112,9 @@ module Gapic
|
|
113
112
|
noncompliant_values = param_value.reject { |pv| allowed_transports.include? pv }
|
114
113
|
if noncompliant_values.any?
|
115
114
|
noncompliant_values_list = noncompliant_values.join ", "
|
116
|
-
error_str = "WARNING: parameter #{param_name_input} (recognised as string array " \
|
117
|
-
|
118
|
-
|
119
|
-
"#{param_config_name} can only contain 'grpc' and/or 'rest' or be empty."
|
115
|
+
error_str = "WARNING: parameter #{param_name_input} (recognised as string array #{param_config_name}) " \
|
116
|
+
"will be discarded because it contains invalid values: #{noncompliant_values_list}. " \
|
117
|
+
"#{param_config_name} can only contain 'grpc' and/or 'rest' or be empty."
|
120
118
|
error_output&.puts error_str
|
121
119
|
param_value = nil
|
122
120
|
end
|
@@ -15,7 +15,7 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
17
|
require "yaml"
|
18
|
-
require "google/api/
|
18
|
+
require "google/api/service_pb"
|
19
19
|
|
20
20
|
module Gapic
|
21
21
|
module Schema
|
@@ -35,6 +35,15 @@ module Gapic
|
|
35
35
|
HTTP_RULES_VERBS_ALLOWED = ["get", "post", "put", "patch", "delete"].freeze
|
36
36
|
HTTP_RULES_BODY_KEY = "body"
|
37
37
|
HTTP_RULES_ADDITIONAL_BINDINGS_KEY = "additional_bindings"
|
38
|
+
PUBS_KEY = "publishing"
|
39
|
+
PUBS_SHORTNAME_KEY = "api_short_name"
|
40
|
+
PUBS_ORGANIZATION_KEY = "organization"
|
41
|
+
PUBS_DOCURL_KEY = "documentation_uri"
|
42
|
+
PUBS_DOCTAG_KEY = "doc_tag_prefix"
|
43
|
+
PUBS_METHOD_SETTINGS = "method_settings"
|
44
|
+
DOCS_KEY = "documentation"
|
45
|
+
DOCS_SUMMARY_KEY = "summary"
|
46
|
+
DOCS_OVERVIEW_KEY = "overview"
|
38
47
|
|
39
48
|
##
|
40
49
|
# Returns the parsed Google::Api::Service object.
|
@@ -57,11 +66,36 @@ module Gapic
|
|
57
66
|
service.id = service_yaml[ID_KEY] if service_yaml.key? ID_KEY
|
58
67
|
service.title = service_yaml[TITLE_KEY] if service_yaml.key? TITLE_KEY
|
59
68
|
|
60
|
-
service.apis
|
69
|
+
service.apis += parse_apis service_yaml[APIS_KEY] if service_yaml.key? APIS_KEY
|
61
70
|
service.http = parse_http service_yaml[HTTP_KEY] if service_yaml.key? HTTP_KEY
|
62
71
|
service
|
63
72
|
end
|
64
73
|
|
74
|
+
##
|
75
|
+
# Populates Gapic::Model::ApiMetadata from a service yaml file.
|
76
|
+
#
|
77
|
+
# @param service_yaml_text [String] YAML content
|
78
|
+
# @param api_metadata [Gapic::Model::ApiMetadata] model to populate
|
79
|
+
#
|
80
|
+
def parse_api_metadata service_yaml_text, api_metadata = nil
|
81
|
+
api_metadata ||= Gapic::Model::ApiMetadata.new
|
82
|
+
if service_yaml_text && !service_yaml_text.empty?
|
83
|
+
service_yaml = YAML.safe_load service_yaml_text
|
84
|
+
pubs_yaml = service_yaml[PUBS_KEY] || {}
|
85
|
+
docs_yaml = service_yaml[DOCS_KEY] || {}
|
86
|
+
api_metadata.update! name: service_yaml[NAME_KEY],
|
87
|
+
short_name: pubs_yaml[PUBS_SHORTNAME_KEY],
|
88
|
+
title: service_yaml[TITLE_KEY],
|
89
|
+
summary: docs_yaml[DOCS_SUMMARY_KEY],
|
90
|
+
description: docs_yaml[DOCS_OVERVIEW_KEY],
|
91
|
+
organization: pubs_yaml[PUBS_ORGANIZATION_KEY],
|
92
|
+
documentation_url: pubs_yaml[PUBS_DOCURL_KEY],
|
93
|
+
doc_tag_prefix: pubs_yaml[PUBS_DOCTAG_KEY],
|
94
|
+
method_settings: pubs_yaml[PUBS_METHOD_SETTINGS] || {}
|
95
|
+
end
|
96
|
+
api_metadata
|
97
|
+
end
|
98
|
+
|
65
99
|
private
|
66
100
|
|
67
101
|
# Parses the Apis section of the service yaml
|
@@ -87,7 +121,7 @@ module Gapic
|
|
87
121
|
http = Google::Api::Http.new
|
88
122
|
|
89
123
|
if http_yaml.key? HTTP_RULES_KEY
|
90
|
-
http.rules
|
124
|
+
http.rules += http_yaml[HTTP_RULES_KEY].map { |rule_yaml| parse_http_rule rule_yaml }
|
91
125
|
end
|
92
126
|
|
93
127
|
http
|
@@ -105,7 +139,7 @@ module Gapic
|
|
105
139
|
rule.body = rule_yaml[HTTP_RULES_BODY_KEY] if rule_yaml.key? HTTP_RULES_BODY_KEY
|
106
140
|
|
107
141
|
if rule_yaml.key? HTTP_RULES_ADDITIONAL_BINDINGS_KEY
|
108
|
-
rule.additional_bindings
|
142
|
+
rule.additional_bindings += rule_yaml[HTTP_RULES_ADDITIONAL_BINDINGS_KEY].map do |binding_yaml|
|
109
143
|
parse_http_rule binding_yaml
|
110
144
|
end
|
111
145
|
end
|