Showing preview only (6,199K chars total). Download the full file or copy to clipboard to get everything.
Repository: grpc-ecosystem/grpc-gateway
Branch: main
Commit: f3f1b599a6e0
Files: 549
Total size: 5.8 MB
Directory structure:
gitextract_hqbjs28v/
├── .bazelci/
│ └── presubmit.yml
├── .bazelrc
├── .bazelversion
├── .devcontainer/
│ └── devcontainer.json
├── .git-blame-ignore-revs
├── .github/
│ ├── Dockerfile
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug.md
│ │ ├── documentation.md
│ │ └── feature.md
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── README_GITHUB.md
│ ├── dependabot.yml
│ ├── stale.yml
│ └── workflows/
│ ├── ci.yml
│ ├── devcontainer.yml
│ ├── release.yml
│ └── renovate.yml
├── .gitignore
├── .goreleaser.yml
├── ADOPTERS.md
├── BUILD.bazel
├── CONTRIBUTING.md
├── LICENSE
├── MODULE.bazel
├── Makefile
├── README.md
├── WORKSPACE
├── bin/
│ └── .gitignore
├── buf.gen.yaml
├── buf.yaml
├── docs/
│ ├── .gitignore
│ ├── Gemfile
│ ├── _config.yml
│ ├── _layouts/
│ │ └── default.html
│ ├── docs/
│ │ ├── contributing/
│ │ │ ├── 2020_season_of_docs.md
│ │ │ ├── getting_started.md
│ │ │ └── index.md
│ │ ├── development/
│ │ │ ├── grpc-gateway_v2_migration_guide.md
│ │ │ ├── index.md
│ │ │ └── installation_for_cygwin.md
│ │ ├── faq.md
│ │ ├── mapping/
│ │ │ ├── binary_file_uploads.md
│ │ │ ├── custom_marshalers.md
│ │ │ ├── customizing_openapi_output.md
│ │ │ ├── customizing_your_gateway.md
│ │ │ ├── examples.md
│ │ │ ├── grpc_api_configuration.md
│ │ │ ├── httpbody_messages.md
│ │ │ ├── index.md
│ │ │ ├── patch_feature.md
│ │ │ └── using_ref_with_responses.md
│ │ ├── operations/
│ │ │ ├── annotated_context.md
│ │ │ ├── aws_gateway_integration.md
│ │ │ ├── health_check.md
│ │ │ ├── index.md
│ │ │ ├── inject_router.md
│ │ │ ├── logging.md
│ │ │ └── tracing.md
│ │ ├── overview/
│ │ │ ├── background.md
│ │ │ ├── index.md
│ │ │ └── usage.md
│ │ ├── related_projects.md
│ │ ├── tutorials/
│ │ │ ├── adding_annotations.md
│ │ │ ├── creating_main.go.md
│ │ │ ├── generating_stubs/
│ │ │ │ ├── index.md
│ │ │ │ ├── using_buf.md
│ │ │ │ └── using_protoc.md
│ │ │ ├── index.md
│ │ │ ├── introduction.md
│ │ │ ├── learn_more.md
│ │ │ └── simple_hello_world.md
│ │ └── using_custom_query_parser.md
│ ├── index.md
│ └── run.sh
├── examples/
│ └── internal/
│ ├── README.md
│ ├── browser/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── a_bit_of_everything_service.spec.js
│ │ ├── bin/
│ │ │ └── .gitignore
│ │ ├── bower.json
│ │ ├── echo_service.spec.js
│ │ ├── gulpfile.js
│ │ ├── index.html
│ │ ├── package.json
│ │ ├── spec/
│ │ │ └── support/
│ │ │ └── jasmine-browser.json
│ │ └── webpack.config.js
│ ├── clients/
│ │ ├── abe/
│ │ │ ├── .gitignore
│ │ │ ├── .swagger-codegen/
│ │ │ │ └── VERSION
│ │ │ ├── .swagger-codegen-ignore
│ │ │ ├── BUILD.bazel
│ │ │ ├── api/
│ │ │ │ └── swagger.yaml
│ │ │ ├── api_a_bit_of_everything.go
│ │ │ ├── api_camel_case_service_name.go
│ │ │ ├── api_echo_rpc.go
│ │ │ ├── api_snake_enum_service.go
│ │ │ ├── client.go
│ │ │ ├── configuration.go
│ │ │ ├── enum_helper.go
│ │ │ ├── model_a_bit_of_everything.go
│ │ │ ├── model_a_bit_of_everything_1.go
│ │ │ ├── model_a_bit_of_everything_2.go
│ │ │ ├── model_a_bit_of_everything_3.go
│ │ │ ├── model_a_bit_of_everything_4.go
│ │ │ ├── model_a_bit_of_everything_5.go
│ │ │ ├── model_a_bit_of_everything_6.go
│ │ │ ├── model_a_bit_of_everything_7.go
│ │ │ ├── model_a_bit_of_everything_8.go
│ │ │ ├── model_a_bit_of_everything_nested.go
│ │ │ ├── model_a_bit_of_everything_service_deep_path_echo_body.go
│ │ │ ├── model_a_bit_of_everything_service_deep_path_echo_body_single_nested.go
│ │ │ ├── model_a_bit_of_everything_service_post_with_empty_body_body.go
│ │ │ ├── model_a_bit_of_everything_service_update_body.go
│ │ │ ├── model_a_bit_of_everything_service_update_v2_body.go
│ │ │ ├── model_book.go
│ │ │ ├── model_examplepb_a_bit_of_everything.go
│ │ │ ├── model_examplepb_a_bit_of_everything_repeated.go
│ │ │ ├── model_examplepb_a_bit_of_everything_service_update_body.go
│ │ │ ├── model_examplepb_bar.go
│ │ │ ├── model_examplepb_body.go
│ │ │ ├── model_examplepb_book.go
│ │ │ ├── model_examplepb_check_status_response.go
│ │ │ ├── model_examplepb_error_object.go
│ │ │ ├── model_examplepb_error_response.go
│ │ │ ├── model_examplepb_numeric_enum.go
│ │ │ ├── model_examplepb_required_message_type_request.go
│ │ │ ├── model_examplepb_snake_case_0_enum.go
│ │ │ ├── model_examplepb_snake_case_enum.go
│ │ │ ├── model_examplepb_snake_enum_response.go
│ │ │ ├── model_google_rpc_status.go
│ │ │ ├── model_message_path_enum_nested_path_enum.go
│ │ │ ├── model_nested_deep_enum.go
│ │ │ ├── model_oneofenum_example_enum.go
│ │ │ ├── model_pathenum_path_enum.go
│ │ │ ├── model_pathenum_snake_case_for_import.go
│ │ │ ├── model_proto_examplepb_foo.go
│ │ │ ├── model_protobuf_any.go
│ │ │ ├── model_sub_string_message.go
│ │ │ ├── model_the_book_to_update_.go
│ │ │ ├── model_the_book_to_update__1.go
│ │ │ ├── model_the_book_to_update_the_books_name_field_is_used_to_identify_the_book_to_be_updated_format_publisherspublisherbooksbook.go
│ │ │ ├── model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask.go
│ │ │ ├── model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask_1.go
│ │ │ ├── model_v1exampledeep_pathsingle_nested_name_single_nested.go
│ │ │ └── response.go
│ │ ├── echo/
│ │ │ ├── .gitignore
│ │ │ ├── .swagger-codegen/
│ │ │ │ └── VERSION
│ │ │ ├── .swagger-codegen-ignore
│ │ │ ├── BUILD.bazel
│ │ │ ├── api/
│ │ │ │ └── swagger.yaml
│ │ │ ├── api_echo_service.go
│ │ │ ├── client.go
│ │ │ ├── configuration.go
│ │ │ ├── model_examplepb_dynamic_message.go
│ │ │ ├── model_examplepb_dynamic_message_update.go
│ │ │ ├── model_examplepb_embedded.go
│ │ │ ├── model_examplepb_nested_message.go
│ │ │ ├── model_examplepb_simple_message.go
│ │ │ ├── model_examplepb_status_check_request.go
│ │ │ ├── model_examplepb_status_check_response.go
│ │ │ ├── model_google_rpc_status.go
│ │ │ ├── model_proto_sub2_status.go
│ │ │ ├── model_proto_sub_status.go
│ │ │ ├── model_protobuf_any.go
│ │ │ ├── model_protobuf_null_value.go
│ │ │ └── response.go
│ │ ├── generateunboundmethods/
│ │ │ ├── .gitignore
│ │ │ ├── .swagger-codegen/
│ │ │ │ └── VERSION
│ │ │ ├── .swagger-codegen-ignore
│ │ │ ├── BUILD.bazel
│ │ │ ├── api/
│ │ │ │ └── swagger.yaml
│ │ │ ├── api_generate_unbound_methods_echo_service.go
│ │ │ ├── client.go
│ │ │ ├── configuration.go
│ │ │ ├── docs/
│ │ │ │ ├── ExamplepbGenerateUnboundMethodsSimpleMessage.md
│ │ │ │ ├── GenerateUnboundMethodsEchoServiceApi.md
│ │ │ │ ├── ProtobufAny.md
│ │ │ │ └── RuntimeError.md
│ │ │ ├── model_examplepb_generate_unbound_methods_simple_message.go
│ │ │ ├── model_protobuf_any.go
│ │ │ ├── model_rpc_status.go
│ │ │ ├── model_runtime_error.go
│ │ │ └── response.go
│ │ ├── responsebody/
│ │ │ ├── .gitignore
│ │ │ ├── .swagger-codegen/
│ │ │ │ └── VERSION
│ │ │ ├── .swagger-codegen-ignore
│ │ │ ├── BUILD.bazel
│ │ │ ├── api/
│ │ │ │ └── swagger.yaml
│ │ │ ├── api_response_body_service.go
│ │ │ ├── client.go
│ │ │ ├── configuration.go
│ │ │ ├── docs/
│ │ │ │ ├── ExamplepbRepeatedResponseBodyOut.md
│ │ │ │ ├── ExamplepbRepeatedResponseBodyOutResponse.md
│ │ │ │ ├── ExamplepbRepeatedResponseStrings.md
│ │ │ │ ├── ExamplepbResponseBodyMessage.md
│ │ │ │ ├── ExamplepbResponseBodyMessageResponse.md
│ │ │ │ ├── ExamplepbResponseBodyOut.md
│ │ │ │ ├── ExamplepbResponseBodyOutResponse.md
│ │ │ │ ├── ExamplepbResponseBodyReq.md
│ │ │ │ ├── ExamplepbResponseBodyValue.md
│ │ │ │ ├── GoogleRpcStatus.md
│ │ │ │ ├── ProtobufAny.md
│ │ │ │ ├── ResponseBodyServiceApi.md
│ │ │ │ ├── ResponseResponseType.md
│ │ │ │ ├── RpcStatus.md
│ │ │ │ ├── RuntimeError.md
│ │ │ │ └── StreamResultOfExamplepbResponseBodyOut.md
│ │ │ ├── model_examplepb_repeated_response_body_out.go
│ │ │ ├── model_examplepb_repeated_response_body_out_response.go
│ │ │ ├── model_examplepb_repeated_response_strings.go
│ │ │ ├── model_examplepb_response_body_out.go
│ │ │ ├── model_examplepb_response_body_out_response.go
│ │ │ ├── model_examplepb_response_body_value.go
│ │ │ ├── model_google_rpc_status.go
│ │ │ ├── model_protobuf_any.go
│ │ │ ├── model_response_response_type.go
│ │ │ ├── model_stream_result_of_examplepb_response_body_out.go
│ │ │ └── response.go
│ │ ├── staticcheck.conf
│ │ └── unannotatedecho/
│ │ ├── .gitignore
│ │ ├── .swagger-codegen/
│ │ │ └── VERSION
│ │ ├── .swagger-codegen-ignore
│ │ ├── BUILD.bazel
│ │ ├── api/
│ │ │ └── swagger.yaml
│ │ ├── api_unannotated_echo_service.go
│ │ ├── client.go
│ │ ├── configuration.go
│ │ ├── model_examplepb_numeric_enum.go
│ │ ├── model_examplepb_unannotated_embedded.go
│ │ ├── model_examplepb_unannotated_nested_message.go
│ │ ├── model_examplepb_unannotated_simple_message.go
│ │ ├── model_protobuf_any.go
│ │ ├── model_rpc_status.go
│ │ └── response.go
│ ├── cmd/
│ │ ├── example-gateway-server/
│ │ │ ├── BUILD.bazel
│ │ │ └── main.go
│ │ └── example-grpc-server/
│ │ ├── BUILD.bazel
│ │ └── main.go
│ ├── gateway/
│ │ ├── BUILD.bazel
│ │ ├── doc.go
│ │ ├── gateway.go
│ │ ├── handlers.go
│ │ └── main.go
│ ├── helloworld/
│ │ ├── BUILD.bazel
│ │ ├── helloworld.pb.go
│ │ ├── helloworld.pb.gw.go
│ │ ├── helloworld.proto
│ │ ├── helloworld.swagger.json
│ │ └── helloworld_grpc.pb.go
│ ├── integration/
│ │ ├── BUILD.bazel
│ │ ├── client_test.go
│ │ ├── integration_test.go
│ │ └── main_test.go
│ ├── proto/
│ │ ├── examplepb/
│ │ │ ├── BUILD.bazel
│ │ │ ├── a_bit_of_everything.pb.go
│ │ │ ├── a_bit_of_everything.pb.gw.go
│ │ │ ├── a_bit_of_everything.proto
│ │ │ ├── a_bit_of_everything.swagger.json
│ │ │ ├── a_bit_of_everything_grpc.pb.go
│ │ │ ├── camel_case_service.pb.go
│ │ │ ├── camel_case_service.pb.gw.go
│ │ │ ├── camel_case_service.proto
│ │ │ ├── camel_case_service.swagger.json
│ │ │ ├── camel_case_service_grpc.pb.go
│ │ │ ├── echo_service.pb.go
│ │ │ ├── echo_service.pb.gw.go
│ │ │ ├── echo_service.proto
│ │ │ ├── echo_service.swagger.json
│ │ │ ├── echo_service_grpc.pb.go
│ │ │ ├── enum_with_single_value.buf.gen.yaml
│ │ │ ├── enum_with_single_value.pb.go
│ │ │ ├── enum_with_single_value.pb.gw.go
│ │ │ ├── enum_with_single_value.proto
│ │ │ ├── enum_with_single_value.swagger.json
│ │ │ ├── enum_with_single_value_grpc.pb.go
│ │ │ ├── excess_body.pb.go
│ │ │ ├── excess_body.pb.gw.go
│ │ │ ├── excess_body.proto
│ │ │ ├── excess_body.swagger.json
│ │ │ ├── excess_body_grpc.pb.go
│ │ │ ├── flow_combination.pb.go
│ │ │ ├── flow_combination.pb.gw.go
│ │ │ ├── flow_combination.proto
│ │ │ ├── flow_combination.swagger.json
│ │ │ ├── flow_combination_grpc.pb.go
│ │ │ ├── generate_unbound_methods.buf.gen.yaml
│ │ │ ├── generate_unbound_methods.pb.go
│ │ │ ├── generate_unbound_methods.pb.gw.go
│ │ │ ├── generate_unbound_methods.proto
│ │ │ ├── generate_unbound_methods.swagger.json
│ │ │ ├── generate_unbound_methods_grpc.pb.go
│ │ │ ├── generated_input.proto
│ │ │ ├── generated_input.swagger.json
│ │ │ ├── ignore_comment.buf.gen.yaml
│ │ │ ├── ignore_comment.pb.go
│ │ │ ├── ignore_comment.pb.gw.go
│ │ │ ├── ignore_comment.proto
│ │ │ ├── ignore_comment.swagger.json
│ │ │ ├── ignore_comment_grpc.pb.go
│ │ │ ├── non_standard_names.pb.go
│ │ │ ├── non_standard_names.pb.gw.go
│ │ │ ├── non_standard_names.proto
│ │ │ ├── non_standard_names.swagger.json
│ │ │ ├── non_standard_names_grpc.pb.go
│ │ │ ├── opaque.buf.gen.yaml
│ │ │ ├── opaque.pb.go
│ │ │ ├── opaque.pb.gw.go
│ │ │ ├── opaque.proto
│ │ │ ├── opaque.swagger.json
│ │ │ ├── opaque_grpc.pb.go
│ │ │ ├── openapi_merge.buf.gen.yaml
│ │ │ ├── openapi_merge.swagger.json
│ │ │ ├── openapi_merge_a.pb.go
│ │ │ ├── openapi_merge_a.pb.gw.go
│ │ │ ├── openapi_merge_a.proto
│ │ │ ├── openapi_merge_a.swagger.json
│ │ │ ├── openapi_merge_a_grpc.pb.go
│ │ │ ├── openapi_merge_b.pb.go
│ │ │ ├── openapi_merge_b.pb.gw.go
│ │ │ ├── openapi_merge_b.proto
│ │ │ ├── openapi_merge_b.swagger.json
│ │ │ ├── openapi_merge_b_grpc.pb.go
│ │ │ ├── proto3_field_semantics.buf.gen.yaml
│ │ │ ├── proto3_field_semantics.pb.go
│ │ │ ├── proto3_field_semantics.pb.gw.go
│ │ │ ├── proto3_field_semantics.proto
│ │ │ ├── proto3_field_semantics.swagger.json
│ │ │ ├── proto3_field_semantics_grpc.pb.go
│ │ │ ├── remove_internal_comment.buf.gen.yaml
│ │ │ ├── remove_internal_comment.pb.go
│ │ │ ├── remove_internal_comment.pb.gw.go
│ │ │ ├── remove_internal_comment.proto
│ │ │ ├── remove_internal_comment.swagger.json
│ │ │ ├── remove_internal_comment_grpc.pb.go
│ │ │ ├── response_body_service.pb.go
│ │ │ ├── response_body_service.pb.gw.go
│ │ │ ├── response_body_service.proto
│ │ │ ├── response_body_service.swagger.json
│ │ │ ├── response_body_service_grpc.pb.go
│ │ │ ├── standalone_echo_service.buf.gen.yaml
│ │ │ ├── standalone_echo_service.yaml
│ │ │ ├── stream.pb.go
│ │ │ ├── stream.pb.gw.go
│ │ │ ├── stream.proto
│ │ │ ├── stream.swagger.json
│ │ │ ├── stream_grpc.pb.go
│ │ │ ├── unannotated_echo_service.buf.gen.yaml
│ │ │ ├── unannotated_echo_service.pb.go
│ │ │ ├── unannotated_echo_service.pb.gw.go
│ │ │ ├── unannotated_echo_service.proto
│ │ │ ├── unannotated_echo_service.swagger.json
│ │ │ ├── unannotated_echo_service.swagger.yaml
│ │ │ ├── unannotated_echo_service.yaml
│ │ │ ├── unannotated_echo_service_grpc.pb.go
│ │ │ ├── use_go_template.buf.gen.yaml
│ │ │ ├── use_go_template.pb.go
│ │ │ ├── use_go_template.pb.gw.go
│ │ │ ├── use_go_template.proto
│ │ │ ├── use_go_template.swagger.json
│ │ │ ├── use_go_template_grpc.pb.go
│ │ │ ├── visibility_rule_echo_service.pb.go
│ │ │ ├── visibility_rule_echo_service.pb.gw.go
│ │ │ ├── visibility_rule_echo_service.proto
│ │ │ ├── visibility_rule_echo_service_grpc.pb.go
│ │ │ ├── visibility_rule_enums_as_ints_echo_service.buf.gen.yaml
│ │ │ ├── visibility_rule_enums_as_ints_echo_service.swagger.json
│ │ │ ├── visibility_rule_internal_echo_service.buf.gen.yaml
│ │ │ ├── visibility_rule_internal_echo_service.swagger.json
│ │ │ ├── visibility_rule_none_echo_service.buf.gen.yaml
│ │ │ ├── visibility_rule_none_echo_service.swagger.json
│ │ │ ├── visibility_rule_preview_and_internal_echo_service.buf.gen.yaml
│ │ │ ├── visibility_rule_preview_and_internal_echo_service.swagger.json
│ │ │ ├── visibility_rule_preview_echo_service.buf.gen.yaml
│ │ │ ├── visibility_rule_preview_echo_service.swagger.json
│ │ │ ├── wrappers.pb.go
│ │ │ ├── wrappers.pb.gw.go
│ │ │ ├── wrappers.proto
│ │ │ ├── wrappers.swagger.json
│ │ │ └── wrappers_grpc.pb.go
│ │ ├── oneofenum/
│ │ │ ├── BUILD.bazel
│ │ │ ├── oneof_enum.pb.go
│ │ │ ├── oneof_enum.proto
│ │ │ └── oneof_enum.swagger.json
│ │ ├── pathenum/
│ │ │ ├── BUILD.bazel
│ │ │ ├── path_enum.pb.go
│ │ │ ├── path_enum.proto
│ │ │ └── path_enum.swagger.json
│ │ ├── standalone/
│ │ │ ├── BUILD.bazel
│ │ │ └── unannotated_echo_service.pb.gw.go
│ │ ├── sub/
│ │ │ ├── BUILD.bazel
│ │ │ ├── camel_case_message.pb.go
│ │ │ ├── camel_case_message.proto
│ │ │ ├── camel_case_message.swagger.json
│ │ │ ├── message.pb.go
│ │ │ ├── message.proto
│ │ │ └── message.swagger.json
│ │ └── sub2/
│ │ ├── BUILD.bazel
│ │ ├── message.pb.go
│ │ ├── message.proto
│ │ └── message.swagger.json
│ └── server/
│ ├── BUILD.bazel
│ ├── a_bit_of_everything.go
│ ├── echo.go
│ ├── excess_body.go
│ ├── fieldmask_helper.go
│ ├── flow_combination.go
│ ├── main.go
│ ├── non_standard_names.go
│ ├── responsebody.go
│ └── unannotatedecho.go
├── go.mod
├── go.sum
├── internal/
│ ├── casing/
│ │ ├── BUILD.bazel
│ │ ├── LICENSE.md
│ │ ├── README.md
│ │ ├── camel.go
│ │ └── camel_test.go
│ ├── codegenerator/
│ │ ├── BUILD.bazel
│ │ ├── doc.go
│ │ ├── parse_req.go
│ │ ├── parse_req_test.go
│ │ └── supported_features.go
│ ├── descriptor/
│ │ ├── BUILD.bazel
│ │ ├── apiconfig/
│ │ │ ├── BUILD.bazel
│ │ │ ├── apiconfig.pb.go
│ │ │ ├── apiconfig.proto
│ │ │ └── apiconfig.swagger.json
│ │ ├── grpc_api_configuration.go
│ │ ├── grpc_api_configuration_test.go
│ │ ├── openapi_configuration.go
│ │ ├── openapi_configuration_test.go
│ │ ├── openapiconfig/
│ │ │ ├── BUILD.bazel
│ │ │ ├── openapiconfig.pb.go
│ │ │ ├── openapiconfig.proto
│ │ │ └── openapiconfig.swagger.json
│ │ ├── registry.go
│ │ ├── registry_test.go
│ │ ├── services.go
│ │ ├── services_test.go
│ │ ├── types.go
│ │ └── types_test.go
│ ├── generator/
│ │ ├── BUILD.bazel
│ │ └── generator.go
│ └── httprule/
│ ├── BUILD.bazel
│ ├── compile.go
│ ├── compile_test.go
│ ├── fuzz.go
│ ├── parse.go
│ ├── parse_test.go
│ ├── types.go
│ └── types_test.go
├── non_module_deps.bzl
├── protoc-gen-grpc-gateway/
│ ├── BUILD.bazel
│ ├── internal/
│ │ └── gengateway/
│ │ ├── BUILD.bazel
│ │ ├── doc.go
│ │ ├── generator.go
│ │ ├── generator_test.go
│ │ ├── template.go
│ │ └── template_test.go
│ └── main.go
├── protoc-gen-openapiv2/
│ ├── BUILD.bazel
│ ├── defs.bzl
│ ├── internal/
│ │ └── genopenapi/
│ │ ├── BUILD.bazel
│ │ ├── cycle_test.go
│ │ ├── doc.go
│ │ ├── format.go
│ │ ├── format_test.go
│ │ ├── generator.go
│ │ ├── generator_test.go
│ │ ├── helpers.go
│ │ ├── helpers_go111_old.go
│ │ ├── helpers_test.go
│ │ ├── naming.go
│ │ ├── naming_test.go
│ │ ├── template.go
│ │ ├── template_fuzz_test.go
│ │ ├── template_test.go
│ │ ├── testdata/
│ │ │ └── generator/
│ │ │ ├── path_item_object.prototext
│ │ │ ├── path_item_object.swagger.yaml
│ │ │ ├── x_go_type.prototext
│ │ │ └── x_go_type.swagger.yaml
│ │ ├── types.go
│ │ └── types_test.go
│ ├── main.go
│ ├── main_test.go
│ └── options/
│ ├── BUILD.bazel
│ ├── annotations.pb.go
│ ├── annotations.proto
│ ├── annotations_protoopaque.pb.go
│ ├── buf.gen.yaml
│ ├── openapiv2.pb.go
│ ├── openapiv2.proto
│ └── openapiv2_protoopaque.pb.go
├── renovate.json
├── repositories.bzl
├── runtime/
│ ├── BUILD.bazel
│ ├── context.go
│ ├── context_test.go
│ ├── convert.go
│ ├── convert_test.go
│ ├── doc.go
│ ├── errors.go
│ ├── errors_test.go
│ ├── fieldmask.go
│ ├── fieldmask_test.go
│ ├── handler.go
│ ├── handler_test.go
│ ├── internal/
│ │ └── examplepb/
│ │ ├── BUILD.bazel
│ │ ├── example.pb.go
│ │ ├── example.proto
│ │ ├── example.swagger.json
│ │ ├── non_standard_names.pb.go
│ │ ├── non_standard_names.proto
│ │ ├── non_standard_names.swagger.json
│ │ ├── non_standard_names_grpc.pb.go
│ │ ├── proto2.pb.go
│ │ ├── proto2.proto
│ │ ├── proto2.swagger.json
│ │ ├── proto3.pb.go
│ │ ├── proto3.proto
│ │ └── proto3.swagger.json
│ ├── marshal_httpbodyproto.go
│ ├── marshal_httpbodyproto_test.go
│ ├── marshal_json.go
│ ├── marshal_json_test.go
│ ├── marshal_jsonpb.go
│ ├── marshal_jsonpb_test.go
│ ├── marshal_proto.go
│ ├── marshal_proto_test.go
│ ├── marshaler.go
│ ├── marshaler_registry.go
│ ├── marshaler_registry_test.go
│ ├── mux.go
│ ├── mux_internal_test.go
│ ├── mux_test.go
│ ├── pattern.go
│ ├── pattern_test.go
│ ├── proto2_convert.go
│ ├── query.go
│ ├── query_fuzz_test.go
│ └── query_test.go
└── utilities/
├── BUILD.bazel
├── doc.go
├── pattern.go
├── readerfactory.go
├── string_array_flag.go
├── string_array_flag_test.go
├── trie.go
└── trie_test.go
================================================
FILE CONTENTS
================================================
================================================
FILE: .bazelci/presubmit.yml
================================================
---
platforms:
ubuntu1804:
build_flags:
- "--build_tag_filters=-nolinux"
build_targets:
- "//..."
test_flags:
- "--features=race"
- "--test_tag_filters=-nolinux"
test_targets:
- "//..."
macos:
build_flags:
- "--build_tag_filters=-nomacos"
build_targets:
- "//..."
test_flags:
- "--features=race"
- "--test_tag_filters=-nomacos"
test_targets:
- "//..."
================================================
FILE: .bazelrc
================================================
build --cxxopt=-std=c++17 --host_cxxopt=-std=c++17
build --test_output=errors
================================================
FILE: .bazelversion
================================================
9.0.1
================================================
FILE: .devcontainer/devcontainer.json
================================================
// For format details, see https://aka.ms/devcontainer.json.
{
"name": "Go",
"build": {
"dockerfile": "../.github/Dockerfile"
},
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {},
"ghcr.io/devcontainers/features/node:1": {},
"ghcr.io/devcontainers/features/go:1": {}
},
"customizations": {
"vscode": {
"editor.formatOnSave": true,
"go.toolsManagement.checkForUpdates": "local",
"go.useLanguageServer": true,
"go.gopath": "/go",
"go.goroot": "/usr/local/go",
"bazel.buildifierExecutable": "/go/bin/buildifier",
"bazel.buildifierFixOnFormat": true,
"bazel.enableCodeLens": true,
"extensions": ["golang.Go", "bazelbuild.vscode-bazel"]
}
}
}
================================================
FILE: .git-blame-ignore-revs
================================================
# .git-blame-ignore-revs
# Formatted all protobuf files
bc0110188a8ef8e232050c3d9b347198dc83536a
================================================
FILE: .github/Dockerfile
================================================
FROM golang:1.26.1
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends \
wget \
unzip \
openjdk-25-jre \
bzip2 \
patch && \
apt-get clean -y && \
rm -rf /var/lib/apt/lists/*
# Install swagger-codegen
ENV SWAGGER_CODEGEN_VERSION=2.4.8
RUN wget https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${SWAGGER_CODEGEN_VERSION}/swagger-codegen-cli-${SWAGGER_CODEGEN_VERSION}.jar \
-O /usr/local/bin/swagger-codegen-cli.jar && \
echo '#!/bin/bash\njava -jar /usr/local/bin/swagger-codegen-cli.jar "$@"' > /usr/local/bin/swagger-codegen && \
chmod +x /usr/local/bin/swagger-codegen
# Install Bazelisk as bazel to manage Bazel
RUN go install github.com/bazelbuild/bazelisk@latest && \
mv $(which bazelisk) /usr/local/bin/bazel
# Install buildifier for bazel formatting
RUN go install github.com/bazelbuild/buildtools/buildifier@latest
================================================
FILE: .github/ISSUE_TEMPLATE/bug.md
================================================
---
name: 🐛 Bug Report
about: Submit a bug report to help us improve
---
## 🐛 Bug Report
(A clear and concise description of what the bug is.)
## To Reproduce
(Write your steps here:)
1. Step 1...
1. Step 2...
1. Step 3...
## Expected behavior
(Write what you thought would happen.)
## Actual Behavior
(Write what happened. Add screenshots, if applicable.)
## Your Environment
(Environment name, version and operating system.)
================================================
FILE: .github/ISSUE_TEMPLATE/documentation.md
================================================
---
name: 📚 Documentation
about: Report an issue related to documentation
---
## 📚 Documentation
(A clear and concise description of what the issue is.)
================================================
FILE: .github/ISSUE_TEMPLATE/feature.md
================================================
---
name: 🚀 Feature
about: Submit a proposal/request for a new feature
---
## 🚀 Feature
(A clear and concise description of what the feature is.)
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
# The gRPC-Gateway project is maintained by volunteers in their spare time. Please follow these troubleshooting steps before submitting an issue.
- [ ] Check if your issue has already been reported (https://github.com/grpc-ecosystem/grpc-gateway/issues).
- [ ] Update your protoc to the [latest version](https://github.com/google/protobuf/releases).
- [ ] Update your copy of the `grpc-gateway` library to the latest version from github:
```sh
go get github.com/grpc-ecosystem/grpc-gateway/v2@latest
```
- [ ] Delete the `protoc-gen-grpc-gateway` and `protoc-gen-openapiv2` binary from your `PATH`, and reinstall the latest versions:
```sh
go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway
go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2
```
## I still have a problem!
Please consider reaching out for help on a chat forum, such as
[Gophers Slack](https://invite.slack.golangbridge.org/) (channel #grpc-gateway).
It's much easier to help with common debugging steps in a chat, and some of
the maintainers are reading the channel regularly. If you
submit an issue which is clearly an environment setup problem, or it's obvious
you haven't tried seeking help somewhere else first, we may close your issue.
## I still have a problem!
Please follow these steps to submit a bug report:
### Bug reports:
Fill in the following sections with explanations of what's gone wrong.
### Steps you follow to reproduce the error:
```html
<!-- Example steps
1. I grab my catapult
2. I load it with lettuce
3. Press the fire button
4. It falls over
-->
```
Your steps here.
### What did you expect to happen instead:
```html
<!-- Example answer
1. It would have rained lettuce from the sky bringing forth a cuddly army of bunnies we could
play with
-->
```
Your answer here.
### What's your theory on why it isn't working:
```html
<!-- Example answer
Evil wizards are hoarding the bunnies and don't want to share. The wizards are casting
lettuce protection spells so the catapult won't work.
-->
```
Your theory here.
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
Thank you for sending the PR! We appreciate you spending the time to work on these changes.
Help us understand your motivation by explaining why you decided to make this change.
You can learn more about contributing to gRPC-Gateway here: https://github.com/grpc-ecosystem/grpc-gateway/blob/main/CONTRIBUTING.md
Happy contributing!
-->
#### References to other Issues or PRs
<!-- If this pull request fixes an issue, write "Fixes #NNNN" in that exact
format, e.g. "Fixes #1234" (see
https://tinyurl.com/auto-closing for more information). Also, please
write a comment on that issue linking back to this pull request once it is
open. -->
#### Have you read the [Contributing Guidelines](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/CONTRIBUTING.md)?
#### Brief description of what is fixed or changed
#### Other comments
================================================
FILE: .github/README_GITHUB.md
================================================
### What's up with the Dockerfile?
The `Dockerfile` in this folder is used as the build environment when regenerating the files (see CONTRIBUTING.md).
The canonical repository for this Dockerfile is `ghcr.io/grpc-ecosystem/grpc-gateway/build-env`.
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "bundler" # See documentation for possible values
directory: "/docs" # Location of package manifests
schedule:
interval: "daily"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: daily
================================================
FILE: .github/stale.yml
================================================
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- help wanted
- enhancement
- security
# Label to use when marking an issue as stale
staleLabel: wontfix
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
================================================
FILE: .github/workflows/ci.yml
================================================
on:
- pull_request
permissions:
contents: read
name: CI
jobs:
build:
strategy:
matrix:
go-version: [oldstable, stable]
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6
with:
go-version: ${{ matrix.go-version }}
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- run: go build ./...
test:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6
with:
go-version: 1.26
check-latest: true
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- run: go test ./...
node_test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
with:
node-version: 24
- uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6
with:
go-version: 1.26
check-latest: true
- run: >
cd examples/internal/browser &&
npm install gulp-cli &&
npm install &&
./node_modules/.bin/gulp
generate:
container:
image: ghcr.io/grpc-ecosystem/grpc-gateway/build-env:latest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
# Required with newer versions of Git
# https://github.com/actions/checkout/issues/766
- run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
- run: make install
- run: make clean
- run: make generate
- run: go mod tidy
- run: git diff --exit-code
bazel:
container:
image: ghcr.io/grpc-ecosystem/grpc-gateway/build-env:latest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5
with:
path: /home/vscode/.cache/_grpc_gateway_bazel
key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }}
restore-keys: v1-bazel-cache-
# Required with newer versions of Git
# https://github.com/actions/checkout/issues/766
- run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
- name: Configure bazel
run:
| # put .bazelrc in $HOME so that it's read before project's .bazelrc
cat > /home/vscode/.bazelrc << EOF
startup --output_base=/home/vscode/.cache/_grpc_gateway_bazel
build --@io_bazel_rules_go//go/config:race
# Workaround https://github.com/bazelbuild/bazel/issues/3645
# See https://docs.bazel.build/versions/0.23.0/command-line-reference.html
build --local_ram_resources=7168 # Github runners have 7G of memory
build --local_cpu_resources=2 # Github runners have 2 vCPU
EOF
- name: Check that Bazel BUILD files are up-to-date
run: bazel run //:gazelle && git diff --exit-code
- name: Check that repositories.bzl is up-to-date
run: |
bazel run //:gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories &&
git diff --exit-code
- name: Check formatting of Bazel BUILD files
run: bazel run //:buildifier && git diff --exit-code
- name: Run tests with Bazel
run: bazel test //...
gorelease:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6
with:
go-version: 1.26
check-latest: true
- run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.28.0
proto_lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6
with:
go-version: 1.26
check-latest: true
- run: make install
- run: PATH=$PATH:~/go/bin buf build
- run: PATH=$PATH:~/go/bin buf lint
- run: PATH=$PATH:~/go/bin buf format -w && git diff --exit-code
- run: PATH=$PATH:~/go/bin buf breaking --path protoc-gen-openapiv2/ --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=main'
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6
with:
go-version: 1.26
check-latest: true
- uses: dominikh/staticcheck-action@9716614d4101e79b4340dd97b10e54d68234e431 # v1.4.1
with:
install-go: false
fuzz:
runs-on: ubuntu-latest
steps:
- name: Build Fuzzers
id: build
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
with:
oss-fuzz-project-name: "grpc-gateway"
dry-run: false
language: go
- name: Run Fuzzers
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
with:
oss-fuzz-project-name: "grpc-gateway"
fuzz-seconds: 600
dry-run: false
language: go
- name: Upload Crash
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7
if: failure() && steps.build.outcome == 'success'
with:
name: artifacts
path: ./out/artifacts
================================================
FILE: .github/workflows/devcontainer.yml
================================================
on:
push:
paths:
- .devcontainer/devcontainer.json
- .github/workflows/devcontainer.yml
- .github/Dockerfile
permissions:
contents: read
packages: write
name: devcontainer
jobs:
rebuild:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Login to GitHub Container Registry
uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Rebuild dev container image
uses: devcontainers/ci@8bf61b26e9c3a98f69cb6ce2f88d24ff59b785c6 # v0.3
with:
imageName: ghcr.io/grpc-ecosystem/grpc-gateway/build-env
cacheFrom: ghcr.io/grpc-ecosystem/grpc-gateway/build-env
push: filter
refFilterForPush: refs/heads/main
================================================
FILE: .github/workflows/release.yml
================================================
on:
push:
tags:
- v2.[0-9]+.[0-9]+
# For testing the workflow before pushing a tag
# This will run goreleaser with --snapshot and test the
# SLSA generator.
workflow_dispatch:
permissions:
contents: read
name: release
jobs:
goreleaser:
outputs:
hashes: ${{ steps.hash.outputs.hashes }}
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
- uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6
with:
check-latest: true
- name: Generate goreleaser args
id: args
run: |
set -euo pipefail
args='release --clean'
if [[ "$GITHUB_REF" != refs/tags/* ]]; then
args+=' --snapshot'
fi
echo "args=$args" >> $GITHUB_OUTPUT
- uses: goreleaser/goreleaser-action@ec59f474b9834571250b370d4735c50f8e2d1e29 # v7
id: run-goreleaser
with:
args: ${{ steps.args.outputs.args }}
distribution: goreleaser # or 'goreleaser-pro'
version: "~> v2" # or 'latest', 'nightly', semver
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Generate subject
id: hash
env:
ARTIFACTS: "${{ steps.run-goreleaser.outputs.artifacts }}"
run: |
set -euo pipefail
checksum_file=$(echo "$ARTIFACTS" | jq -r '.[] | select (.type=="Checksum") | .path')
echo "hashes=$(cat $checksum_file | base64 -w0)" >> $GITHUB_OUTPUT
provenance:
needs: [goreleaser]
permissions:
actions: read # To read the workflow path.
id-token: write # To sign the provenance.
contents: write # To add assets to a release.
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.1.0
with:
compile-generator: true # Workaround for https://github.com/slsa-framework/slsa-github-generator/issues/1163
base64-subjects: "${{ needs.goreleaser.outputs.hashes }}"
upload-assets: ${{ github.event_name == 'push' }} # upload to a new release when pushing via tag
================================================
FILE: .github/workflows/renovate.yml
================================================
on:
push:
branches:
- renovate/*
permissions:
contents: read
name: renovate
jobs:
update_repositoriesbzl:
container:
image: ghcr.io/grpc-ecosystem/grpc-gateway/build-env:latest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
token: ${{ secrets.GH_PUSH_TOKEN }}
- uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5
with:
path: /home/vscode/.cache/_grpc_gateway_bazel
key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }}
restore-keys: v1-bazel-cache-
- name: Configure bazel
run:
| # put .bazelrc in $HOME so that it's read before project's .bazelrc
cat > /home/vscode/.bazelrc << EOF
startup --output_base /home/vscode/.cache/_grpc_gateway_bazel
build --@io_bazel_rules_go//go/config:race
# Workaround https://github.com/bazelbuild/bazel/issues/3645
# See https://docs.bazel.build/versions/0.23.0/command-line-reference.html
build --local_ram_resources=7168 # Github runners have 7G of memory
build --local_cpu_resources=2 # Github runners have 2 vCPU
EOF
- run: bazel run //:gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories
# Required with newer versions of Git
# https://github.com/actions/checkout/issues/766
- run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
- run: |
git add .
if output=$(git status --porcelain) && [ ! -z "$output" ]; then
git config user.name "Renovate Bot"
git config user.email "bot@renovateapp.com"
git commit --amend --no-edit
git push --force-with-lease origin ${{ github.ref_name }}
fi
regenerate:
container:
image: ghcr.io/grpc-ecosystem/grpc-gateway/build-env:latest
runs-on: ubuntu-latest
needs:
# Run after update_repositoriesbzl to avoid
# git conflicts
- update_repositoriesbzl
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
token: ${{ secrets.GH_PUSH_TOKEN }}
# Required with newer versions of Git
# https://github.com/actions/checkout/issues/766
- run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
- run: make install
- run: make clean
- run: make generate
- run: go mod tidy
- run: |
git add .
if output=$(git status --porcelain) && [ ! -z "$output" ]; then
git config user.name "Renovate Bot"
git config user.email "bot@renovateapp.com"
git commit --amend --no-edit
git push --force-with-lease origin ${{ github.ref_name }}
fi
================================================
FILE: .gitignore
================================================
_output/
.idea
# Bazel.
bazel-bin
bazel-genfiles
bazel-grpc-gateway
bazel-out
bazel-testlogs
# Go vendor directory
vendor
# Generated travis files
.travis.yml
================================================
FILE: .goreleaser.yml
================================================
version: 2
builds:
- main: ./protoc-gen-grpc-gateway/main.go
id: protoc-gen-grpc-gateway
binary: protoc-gen-grpc-gateway
env:
- CGO_ENABLED=0
goos:
- linux
- darwin
- windows
goarch:
- amd64
- arm64
- main: ./protoc-gen-openapiv2/main.go
id: protoc-gen-openapiv2
binary: protoc-gen-openapiv2
env:
- CGO_ENABLED=0
goos:
- linux
- darwin
- windows
goarch:
- amd64
- arm64
archives:
- name_template: '{{ .Binary }}-{{ .Tag }}-{{ .Os }}-{{if eq .Arch "amd64"}}x86_64{{else}}{{ .Arch }}{{end}}'
format: binary
source:
enabled: true
name_template: '{{ .ProjectName }}-{{ .Tag }}'
dist: _output
================================================
FILE: ADOPTERS.md
================================================
# Adopters
This is a list of organizations that have spoken publicly about their adoption or
production users that have added themselves (in alphabetical order):
- [Ad Hoc](http://adhocteam.us/) uses the gRPC-Gateway to serve millions of
API requests per day.
- [Chef](https://www.chef.io/) uses the gRPC-Gateway to provide the user-facing
API of [Chef Automate](https://automate.chef.io/). Furthermore, the generated
OpenAPI data serves as the basis for its [API documentation](https://automate.chef.io/docs/api/).
The code is Open Source, [see `github.com/chef/automate`](https://github.com/chef/automate).
- [Cho Tot](https://careers.chotot.com/about-us/) utilizes gRPC Gateway to seamlessly integrate HTTP and gRPC services, enabling efficient communication for both legacy and modern systems.
- [Conduit](https://github.com/ConduitIO/conduit), a data streaming tool written in Go,
uses the gRPC-Gateway since its very beginning to provide an HTTP API in addition to its gRPC API.
This makes it easier to integrate with Conduit, and the generated OpenAPI data is used in the documentation.
- [PITS Global Data Recovery Services](https://www.pitsdatarecovery.net/) uses the gRPC-Gateway to generate efficient reverse-proxy servers for internal needs.
- [Scaleway](https://www.scaleway.com/en/) uses the gRPC-Gateway since 2018 to
serve millions of API requests per day [1].
- [SpiceDB](https://github.com/authzed/spicedb) uses the gRPC-Gateway to handle
requests for security-critical permissions checks in environments where gRPC
is unavailable.
If you have adopted the gRPC-Gateway and would like to be included in this list,
feel free to submit a PR.
[1]: [The odyssey of an HTTP request in Scaleway](https://www.youtube.com/watch?v=eLxD-zIUraE&feature=youtu.be&t=480).
================================================
FILE: BUILD.bazel
================================================
load("@bazel_gazelle//:def.bzl", "gazelle")
load("@com_github_bazelbuild_buildtools//buildifier:def.bzl", "buildifier")
load("@io_bazel_rules_go//proto:compiler.bzl", "go_proto_compiler")
load("@io_bazel_rules_go//proto/wkt:well_known_types.bzl", "PROTO_RUNTIME_DEPS", "WELL_KNOWN_TYPES_APIV2")
exports_files(["LICENSE"])
buildifier(
name = "buildifier",
)
buildifier(
name = "buildifier_check",
mode = "check",
)
# gazelle:exclude _output
# gazelle:prefix github.com/grpc-ecosystem/grpc-gateway/v2
# gazelle:go_proto_compilers //:go_apiv2
# gazelle:go_grpc_compilers //:go_apiv2, //:go_grpc
# gazelle:go_naming_convention import_alias
# gazelle:resolve proto proto google/api/annotations.proto @googleapis//google/api:annotations_proto
# gazelle:resolve proto go google/api/annotations.proto @org_golang_google_genproto_googleapis_api//annotations
# gazelle:resolve proto proto google/api/http.proto @googleapis//google/api:http_proto
# gazelle:resolve proto go google/api/http.proto @org_golang_google_genproto_googleapis_api//annotations
# gazelle:resolve proto proto google/api/field_behavior.proto @googleapis//google/api:field_behavior_proto
# gazelle:resolve proto go google/api/field_behavior.proto @org_golang_google_genproto_googleapis_api//annotations
# gazelle:resolve proto proto google/api/httpbody.proto @googleapis//google/api:httpbody_proto
# gazelle:resolve proto go google/api/httpbody.proto @org_golang_google_genproto_googleapis_api//httpbody
# gazelle:resolve proto proto google/api/visibility.proto @googleapis//google/api:visibility_proto
# gazelle:resolve proto go google/api/visibility.proto @org_golang_google_genproto_googleapis_api//visibility
# gazelle:resolve proto proto google/rpc/status.proto @googleapis//google/rpc:status_proto
# gazelle:resolve proto go google/rpc/status.proto @org_golang_google_genproto_googleapis_rpc//status
gazelle(name = "gazelle")
package_group(
name = "generators",
packages = [
"//protoc-gen-grpc-gateway/...",
"//protoc-gen-openapiv2/...",
],
)
go_proto_compiler(
name = "go_apiv2",
options = [
"paths=source_relative",
],
plugin = "@org_golang_google_protobuf//cmd/protoc-gen-go",
suffix = ".pb.go",
visibility = ["//visibility:public"],
deps = PROTO_RUNTIME_DEPS + WELL_KNOWN_TYPES_APIV2,
)
go_proto_compiler(
name = "go_apiv2_opaque",
options = [
"paths=source_relative",
"default_api_level=API_OPAQUE",
],
plugin = "@org_golang_google_protobuf//cmd/protoc-gen-go",
suffix = ".pb.go",
visibility = ["//visibility:public"],
deps = PROTO_RUNTIME_DEPS + WELL_KNOWN_TYPES_APIV2,
)
go_proto_compiler(
name = "go_grpc",
options = [
"paths=source_relative",
"require_unimplemented_servers=false",
],
plugin = "@org_golang_google_grpc_cmd_protoc_gen_go_grpc//:protoc-gen-go-grpc",
suffix = "_grpc.pb.go",
visibility = ["//visibility:public"],
deps = PROTO_RUNTIME_DEPS + [
"@org_golang_google_grpc//:go_default_library",
"@org_golang_google_grpc//codes:go_default_library",
"@org_golang_google_grpc//status:go_default_library",
],
)
================================================
FILE: CONTRIBUTING.md
================================================
# How to contribute
## Code reviews
All submissions, including submissions by project members, require review.
## I want to regenerate the files after making changes
### Using Docker
It should be as simple as this (run from the root of the repository):
```bash
docker run -v $(pwd):/grpc-gateway -w /grpc-gateway --rm ghcr.io/grpc-ecosystem/grpc-gateway/build-env:latest \
/bin/bash -c 'make install && \
make clean && \
make generate'
docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \
ghcr.io/grpc-ecosystem/grpc-gateway/build-env:latest -c '\
bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories && \
bazel run :gazelle && \
bazel run :buildifier'
```
You may need to authenticate with GitHub to pull `ghcr.io/grpc-ecosystem/grpc-gateway/build-env`.
You can do this by following the steps on the [GitHub Package docs](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#authenticating-to-the-container-registry).
### Using Visual Studio Code dev containers
This repo contains a `devcontainer.json` configuration that sets up the build environment in a container using
[VS Code dev containers](https://code.visualstudio.com/docs/remote/containers). If you're using the dev container,
you can run the commands directly in your terminal:
```sh
$ make install && make clean && make generate
```
```sh
$ bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories && \
bazel run :gazelle && \
bazel run :buildifier
```
Note that the above-listed docker commands will not work in the dev container, since volume mounts from
nested docker container is not possible.
If this has resulted in some file changes in the repo, please ensure you check those in with your merge request.
## Making a release
To make a release, follow these steps:
1. Decide on a release version. The `gorelease` job can
recommend whether the new release should be a patch or minor release.
1. Tag the release on `main`.
1. The release can be created using the command line, or also through GitHub's [releases
UI](https://github.com/grpc-ecosystem/grpc-gateway/releases/new).
1. If you create a release using the web UI you can publish it as a draft and have it
reviewed by another maintainer.
1. Update the release description. Try to include some of the highlights of this release,
ideally with links to the PRs and crediting the contributors.
1. Update the gorelease job in .github/ci.yaml to point to the new release version.
1. Sit back and pat yourself on the back for a job well done :clap:.
================================================
FILE: LICENSE
================================================
Copyright (c) 2015, Gengo, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of Gengo, Inc. nor the names of its
contributors may be used to endorse or promote products derived from this
software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: MODULE.bazel
================================================
module(
name = "grpc_ecosystem_grpc_gateway",
# TODO: Change this to the actual version on each release.
# This can wait until we publish this project on the Bazel registry.
version = "0.0.0",
)
# Bazel Central Registry modules.
bazel_dep(name = "bazel_features", version = "1.43.0")
bazel_dep(name = "rules_license", version = "1.0.0")
bazel_dep(name = "rules_python", version = "1.9.0")
bazel_dep(name = "rules_proto", version = "7.1.0")
bazel_dep(name = "rules_go", version = "0.60.0", repo_name = "io_bazel_rules_go")
bazel_dep(name = "rules_shell", version = "0.6.1")
bazel_dep(name = "gazelle", version = "0.47.0", repo_name = "bazel_gazelle")
bazel_dep(name = "bazel_skylib", version = "1.9.0")
bazel_dep(name = "protobuf", version = "34.0.bcr.1", repo_name = "com_google_protobuf")
bazel_dep(name = "googleapis", version = "0.0.0-20260223-edfe7983")
# This is required as a transitive dependency and not directly needed by this module.
# We have this version pinned to solve for differences in the MODULE.bazel.lock file
# when running CI.
bazel_dep(name = "rules_rust", version = "0.69.0")
go_sdk = use_extension("@io_bazel_rules_go//go:extensions.bzl", "go_sdk")
go_sdk.download(version = "1.26.0")
go_deps = use_extension("@bazel_gazelle//:extensions.bzl", "go_deps")
go_deps.from_file(go_mod = ":go.mod")
# These dependencies are required by `.proto` files but are not captured in `go.mod`,
# so they have to explicitly be made known to Gazelle.
go_deps.module(
path = "google.golang.org/grpc/cmd/protoc-gen-go-grpc",
sum = "h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A=",
version = "v1.5.1",
)
go_deps.module(
path = "github.com/golang/protobuf",
sum = "h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=",
version = "v1.5.4",
)
go_deps.module(
path = "github.com/bazelbuild/buildtools/v7",
sum = "h1:BRlRwQ/4rd608QvjsM9HSzBLLM1nXyzHaDzdkBAyDKk=",
version = "v7.3.1",
)
go_deps.module(
path = "golang.org/x/tools",
sum = "h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=",
version = "v0.21.1-0.20240508182429-e35e4ccd0d2d",
)
use_repo(
go_deps,
"com_github_antihax_optional",
"com_github_bazelbuild_buildtools_v7",
"com_github_golang_protobuf",
"com_github_google_go_cmp",
"com_github_rogpeppe_fastuuid",
"in_yaml_go_yaml_v3",
"org_golang_google_genproto_googleapis_api",
"org_golang_google_genproto_googleapis_rpc",
"org_golang_google_grpc",
"org_golang_google_grpc_cmd_protoc_gen_go_grpc",
"org_golang_google_protobuf",
"org_golang_x_oauth2",
"org_golang_x_text",
"org_golang_x_tools",
)
non_module_deps = use_extension(":non_module_deps.bzl", "non_module_deps")
use_repo(
non_module_deps,
"com_github_bazelbuild_buildtools",
)
================================================
FILE: Makefile
================================================
# This is a Makefile which maintains files automatically generated but to be
# shipped together with other files.
# You don't have to rebuild these targets by yourself unless you develop
# gRPC-Gateway itself.
EXAMPLE_CLIENT_DIR=examples/internal/clients
ECHO_EXAMPLE_SPEC=examples/internal/proto/examplepb/echo_service.swagger.json
ECHO_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/echo/client.go \
$(EXAMPLE_CLIENT_DIR)/echo/response.go \
$(EXAMPLE_CLIENT_DIR)/echo/configuration.go \
$(EXAMPLE_CLIENT_DIR)/echo/api_echo_service.go \
$(EXAMPLE_CLIENT_DIR)/echo/model_examplepb_simple_message.go \
$(EXAMPLE_CLIENT_DIR)/echo/model_examplepb_embedded.go
ABE_EXAMPLE_SPEC=examples/internal/proto/examplepb/a_bit_of_everything.swagger.json
ABE_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/abe/model_a_bit_of_everything_nested.go \
$(EXAMPLE_CLIENT_DIR)/abe/api_a_bit_of_everything_service.go \
$(EXAMPLE_CLIENT_DIR)/abe/client.go \
$(EXAMPLE_CLIENT_DIR)/abe/api_camel_case_service_name.go \
$(EXAMPLE_CLIENT_DIR)/abe/configuration.go \
$(EXAMPLE_CLIENT_DIR)/abe/api_echo_rpc.go \
$(EXAMPLE_CLIENT_DIR)/abe/model_examplepb_a_bit_of_everything.go \
$(EXAMPLE_CLIENT_DIR)/abe/model_examplepb_a_bit_of_everything_repeated.go \
$(EXAMPLE_CLIENT_DIR)/abe/model_examplepb_body.go \
$(EXAMPLE_CLIENT_DIR)/abe/model_examplepb_numeric_enum.go \
$(EXAMPLE_CLIENT_DIR)/abe/model_examplepb_update_v2_request.go \
$(EXAMPLE_CLIENT_DIR)/abe/model_message_path_enum_nested_path_enum.go \
$(EXAMPLE_CLIENT_DIR)/abe/model_nested_deep_enum.go \
$(EXAMPLE_CLIENT_DIR)/abe/model_pathenum_path_enum.go \
$(EXAMPLE_CLIENT_DIR)/abe/model_protobuf_field_mask.go \
$(EXAMPLE_CLIENT_DIR)/abe/response.go
UNANNOTATED_ECHO_EXAMPLE_SPEC=examples/internal/proto/examplepb/unannotated_echo_service.swagger.json
UNANNOTATED_ECHO_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/unannotatedecho/client.go \
$(EXAMPLE_CLIENT_DIR)/unannotatedecho/response.go \
$(EXAMPLE_CLIENT_DIR)/unannotatedecho/configuration.go \
$(EXAMPLE_CLIENT_DIR)/unannotatedecho/model_examplepb_unannotated_simple_message.go \
$(EXAMPLE_CLIENT_DIR)/unannotatedecho/api_unannotated_echo_service.go
RESPONSE_BODY_EXAMPLE_SPEC=examples/internal/proto/examplepb/response_body_service.swagger.json
RESPONSE_BODY_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/responsebody/client.go \
$(EXAMPLE_CLIENT_DIR)/responsebody/response.go \
$(EXAMPLE_CLIENT_DIR)/responsebody/configuration.go \
$(EXAMPLE_CLIENT_DIR)/responsebody/model_examplepb_repeated_response_body_out.go \
$(EXAMPLE_CLIENT_DIR)/responsebody/model_examplepb_repeated_response_body_out_response.go \
$(EXAMPLE_CLIENT_DIR)/responsebody/model_examplepb_repeated_response_strings.go \
$(EXAMPLE_CLIENT_DIR)/responsebody/model_examplepb_response_body_out.go \
$(EXAMPLE_CLIENT_DIR)/responsebody/model_examplepb_response_body_out_response.go \
$(EXAMPLE_CLIENT_DIR)/responsebody/model_response_response_type.go \
$(EXAMPLE_CLIENT_DIR)/responsebody/api_response_body_service.go
GENERATE_UNBOUND_METHODS_EXAMPLE_SPEC=examples/internal/proto/examplepb/generate_unbound_methods.swagger.json
GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/generateunboundmethods/client.go \
$(EXAMPLE_CLIENT_DIR)/generateunboundmethods/response.go \
$(EXAMPLE_CLIENT_DIR)/generateunboundmethods/configuration.go \
$(EXAMPLE_CLIENT_DIR)/generateunboundmethods/model_examplepb_generate_unbound_methods_simple_message.go \
$(EXAMPLE_CLIENT_DIR)/generateunboundmethods/api_generate_unbound_methods.go
EXAMPLE_CLIENT_SRCS=$(ECHO_EXAMPLE_SRCS) $(ABE_EXAMPLE_SRCS) $(UNANNOTATED_ECHO_EXAMPLE_SRCS) $(RESPONSE_BODY_EXAMPLE_SRCS) $(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS)
SWAGGER_CODEGEN=swagger-codegen
$(ECHO_EXAMPLE_SRCS): $(ECHO_EXAMPLE_SPEC)
$(SWAGGER_CODEGEN) generate -i $(ECHO_EXAMPLE_SPEC) \
-l go -o examples/internal/clients/echo --additional-properties packageName=echo
@rm -f $(EXAMPLE_CLIENT_DIR)/echo/README.md \
$(EXAMPLE_CLIENT_DIR)/echo/git_push.sh
$(ABE_EXAMPLE_SRCS): $(ABE_EXAMPLE_SPEC)
$(SWAGGER_CODEGEN) generate -i $(ABE_EXAMPLE_SPEC) \
-l go -o examples/internal/clients/abe --additional-properties packageName=abe
@rm -f $(EXAMPLE_CLIENT_DIR)/abe/README.md \
$(EXAMPLE_CLIENT_DIR)/abe/git_push.sh
$(UNANNOTATED_ECHO_EXAMPLE_SRCS): $(UNANNOTATED_ECHO_EXAMPLE_SPEC)
$(SWAGGER_CODEGEN) generate -i $(UNANNOTATED_ECHO_EXAMPLE_SPEC) \
-l go -o examples/internal/clients/unannotatedecho --additional-properties packageName=unannotatedecho
@rm -f $(EXAMPLE_CLIENT_DIR)/unannotatedecho/README.md \
$(EXAMPLE_CLIENT_DIR)/unannotatedecho/git_push.sh
$(RESPONSE_BODY_EXAMPLE_SRCS): $(RESPONSE_BODY_EXAMPLE_SPEC)
$(SWAGGER_CODEGEN) generate -i $(RESPONSE_BODY_EXAMPLE_SPEC) \
-l go -o examples/internal/clients/responsebody --additional-properties packageName=responsebody
@rm -f $(EXAMPLE_CLIENT_DIR)/responsebody/README.md \
$(EXAMPLE_CLIENT_DIR)/responsebody/git_push.sh
$(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS): $(GENERATE_UNBOUND_METHODS_EXAMPLE_SPEC)
$(SWAGGER_CODEGEN) generate -i $(GENERATE_UNBOUND_METHODS_EXAMPLE_SPEC) \
-l go -o examples/internal/clients/generateunboundmethods --additional-properties packageName=generateunboundmethods
@rm -f $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/README.md \
$(EXAMPLE_CLIENT_DIR)/generateunboundmethods/git_push.sh
install:
go install github.com/bufbuild/buf/cmd/buf@v1.45.0
go install \
./protoc-gen-openapiv2 \
./protoc-gen-grpc-gateway
proto:
# These generation steps are run in order so that later steps can
# overwrite files produced by previous steps, if necessary.
buf generate
# Remove generated gateway in runtime tests, causes import cycle
rm ./runtime/internal/examplepb/non_standard_names.pb.gw.go
# Remove generated_input.proto files, bazel genrule relies on these
# *not* being generated (to avoid conflicts).
rm ./examples/internal/proto/examplepb/generated_input.pb.go
rm ./examples/internal/proto/examplepb/generated_input_grpc.pb.go
rm ./examples/internal/proto/examplepb/generated_input.pb.gw.go
# Remove swagger files for openapiv2 definitions, they're unused
rm ./protoc-gen-openapiv2/options/annotations.swagger.json
rm ./protoc-gen-openapiv2/options/openapiv2.swagger.json
buf generate \
--template ./examples/internal/proto/examplepb/openapi_merge.buf.gen.yaml \
--path ./examples/internal/proto/examplepb/openapi_merge_a.proto \
--path ./examples/internal/proto/examplepb/openapi_merge_b.proto
buf generate \
--template ./examples/internal/proto/examplepb/standalone_echo_service.buf.gen.yaml \
--path examples/internal/proto/examplepb/unannotated_echo_service.proto
mv examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go examples/internal/proto/standalone/
buf generate \
--template ./examples/internal/proto/examplepb/unannotated_echo_service.buf.gen.yaml \
--path examples/internal/proto/examplepb/unannotated_echo_service.proto
buf generate \
--template ./examples/internal/proto/examplepb/generate_unbound_methods.buf.gen.yaml \
--path examples/internal/proto/examplepb/generate_unbound_methods.proto
buf generate \
--template ./examples/internal/proto/examplepb/use_go_template.buf.gen.yaml \
--path examples/internal/proto/examplepb/use_go_template.proto
buf generate \
--template ./examples/internal/proto/examplepb/ignore_comment.buf.gen.yaml \
--path examples/internal/proto/examplepb/ignore_comment.proto
buf generate \
--template ./examples/internal/proto/examplepb/remove_internal_comment.buf.gen.yaml \
--path examples/internal/proto/examplepb/remove_internal_comment.proto
buf generate \
--template ./examples/internal/proto/examplepb/visibility_rule_preview_echo_service.buf.gen.yaml \
--path examples/internal/proto/examplepb/visibility_rule_echo_service.proto
mv examples/internal/proto/examplepb/visibility_rule_echo_service.swagger.json examples/internal/proto/examplepb/visibility_rule_preview_echo_service.swagger.json
buf generate \
--template ./examples/internal/proto/examplepb/visibility_rule_internal_echo_service.buf.gen.yaml \
--path examples/internal/proto/examplepb/visibility_rule_echo_service.proto
mv examples/internal/proto/examplepb/visibility_rule_echo_service.swagger.json examples/internal/proto/examplepb/visibility_rule_internal_echo_service.swagger.json
buf generate \
--template ./examples/internal/proto/examplepb/visibility_rule_none_echo_service.buf.gen.yaml \
--path examples/internal/proto/examplepb/visibility_rule_echo_service.proto
mv examples/internal/proto/examplepb/visibility_rule_echo_service.swagger.json examples/internal/proto/examplepb/visibility_rule_none_echo_service.swagger.json
buf generate \
--template ./examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.buf.gen.yaml \
--path examples/internal/proto/examplepb/visibility_rule_echo_service.proto
mv examples/internal/proto/examplepb/visibility_rule_echo_service.swagger.json examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json
buf generate \
--template ./examples/internal/proto/examplepb/visibility_rule_enums_as_ints_echo_service.buf.gen.yaml \
--path examples/internal/proto/examplepb/visibility_rule_echo_service.proto
mv examples/internal/proto/examplepb/visibility_rule_echo_service.swagger.json examples/internal/proto/examplepb/visibility_rule_enums_as_ints_echo_service.swagger.json
buf generate \
--template examples/internal/proto/examplepb/enum_with_single_value.buf.gen.yaml \
--path examples/internal/proto/examplepb/enum_with_single_value.proto
buf generate \
--template ./examples/internal/proto/examplepb/proto3_field_semantics.buf.gen.yaml \
--path examples/internal/proto/examplepb/proto3_field_semantics.proto
buf generate \
--template ./protoc-gen-openapiv2/options/buf.gen.yaml \
--path ./protoc-gen-openapiv2/options/annotations.proto \
--path ./protoc-gen-openapiv2/options/openapiv2.proto
buf generate \
--template ./examples/internal/proto/examplepb/opaque.buf.gen.yaml \
--path examples/internal/proto/examplepb/opaque.proto
generate: proto $(ECHO_EXAMPLE_SRCS) $(ABE_EXAMPLE_SRCS) $(UNANNOTATED_ECHO_EXAMPLE_SRCS) $(RESPONSE_BODY_EXAMPLE_SRCS) $(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS)
test: proto
go test -short -race ./...
go test -race ./examples/internal/integration -args -network=unix -endpoint=test.sock
clean:
find . -type f -name '*.pb.go' -delete
find . -type f -name '*.swagger.json' -delete
find . -type f -name '*.pb.gw.go' -delete
rm -f $(EXAMPLE_CLIENT_SRCS)
.PHONY: generate test clean proto install
================================================
FILE: README.md
================================================
<div align="center">
<h1>gRPC-Gateway</h1>
<p>
gRPC to JSON proxy generator following the gRPC HTTP spec
</p>
<a href="https://github.com/grpc-ecosystem/grpc-gateway/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/grpc-ecosystem/grpc-gateway/ci.yml?color=379c9c&label=build&logo=github&logoColor=ffffff&style=flat-square"/></a>
<a href="https://app.slack.com/client/T029RQSE6/CBATURP1D"><img src="https://img.shields.io/badge/slack-grpc--gateway-379c9c?logo=slack&logoColor=ffffff&style=flat-square"/></a>
<a href="https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE"><img src="https://img.shields.io/github/license/grpc-ecosystem/grpc-gateway?color=379c9c&style=flat-square"/></a>
<a href="https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/v2"><img src="https://img.shields.io/badge/godoc-reference-379c9c?style=flat-square&logo=go&logoColor=ffffff"/></a>
<a href="https://github.com/grpc-ecosystem/grpc-gateway/releases"><img src="https://img.shields.io/github/v/release/grpc-ecosystem/grpc-gateway?color=379c9c&logoColor=ffffff&style=flat-square"/></a>
<a href="https://github.com/grpc-ecosystem/grpc-gateway/stargazers"><img src="https://img.shields.io/github/stars/grpc-ecosystem/grpc-gateway?color=379c9c&style=flat-square"/></a>
<a href="https://slsa.dev/images/gh-badge-level3.svg"><img src="https://slsa.dev/images/gh-badge-level3.svg"/></a>
</div>
## About
The gRPC-Gateway is a plugin of the Google protocol buffers compiler
[protoc](https://github.com/protocolbuffers/protobuf).
It reads protobuf service definitions and generates a reverse-proxy server which
translates a RESTful HTTP API into gRPC. This server is generated according to the
[`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46)
annotations in your service definitions.
This helps you provide your APIs in both gRPC and RESTful style at the same time.
<div align="center">
<img src="docs/assets/images/architecture_introduction_diagram.svg" />
</div>
## Docs
You can read our docs at:
- https://grpc-ecosystem.github.io/grpc-gateway/
## Testimonials
> We use the gRPC-Gateway to serve millions of API requests per day,
> and have been since 2018 and through all of that,
> we have never had any issues with it.
>
> _- William Mill, [Ad Hoc](http://adhocteam.us/)_
## Background
gRPC is great -- it generates API clients and server stubs in many programming
languages, it is fast, easy-to-use, bandwidth-efficient and its design is
combat-proven by Google. However, you might still want to provide a traditional
RESTful JSON API as well. Reasons can range from maintaining
backward-compatibility, supporting languages or clients that are not well supported by
gRPC, to simply maintaining the aesthetics and tooling involved with a RESTful
JSON architecture.
This project aims to provide that HTTP+JSON interface to your gRPC service.
A small amount of configuration in your service to attach HTTP semantics is all
that's needed to generate a reverse-proxy with this library.
## Installation
### Compile from source
The following instructions assume you are using
[Go Modules](https://go.dev/wiki/Modules) for dependency
management. Use a
[tool dependency](https://go.dev/wiki/Modules#how-can-i-track-tool-dependencies-for-a-module)
to track the versions of the following executable packages:
```go
// +build tools
package tools
import (
_ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway"
_ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2"
_ "google.golang.org/grpc/cmd/protoc-gen-go-grpc"
_ "google.golang.org/protobuf/cmd/protoc-gen-go"
)
```
Run `go mod tidy` to resolve the versions. Install by running
```sh
go install \
github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway \
github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2 \
google.golang.org/protobuf/cmd/protoc-gen-go \
google.golang.org/grpc/cmd/protoc-gen-go-grpc
```
This will place four binaries in your `$GOBIN`;
- `protoc-gen-grpc-gateway`
- `protoc-gen-openapiv2`
- `protoc-gen-go`
- `protoc-gen-go-grpc`
Make sure that your `$GOBIN` is in your `$PATH`.
### **Using the `tool` Directive in Go 1.24**
Starting from Go 1.24, the `tool` directive in `go.mod` provides a structured way to track and manage executable dependencies. This replaces the previous workaround of using a separate `tools.go` file with blank imports.
#### **Tracking Tools in `go.mod`**
Instead of manually importing tool dependencies in a Go source file, you can now use the `tool` directive in `go.mod` to declare the tools your project depends on. For example:
```go
module tools
go 1.24
tool (
github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway
github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2
google.golang.org/grpc/cmd/protoc-gen-go-grpc
google.golang.org/protobuf/cmd/protoc-gen-go
)
```
#### **Managing Tool Dependencies**
To add tools to your module, use the `-tool` flag with `go get`:
```sh
go get -tool github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway
go get -tool github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2
go get -tool google.golang.org/protobuf/cmd/protoc-gen-go
go get -tool google.golang.org/grpc/cmd/protoc-gen-go-grpc
```
This automatically updates `go.mod`, adding the tools under the `tool` directive along with `require` statements to ensure version tracking.
### Install Tools
Once the tool dependencies are properly recorded in the `go.mod` file, simply execute the following command in the root directory of your project:
```sh
go install tool
```
This will place four binaries in your `$GOBIN`;
- `protoc-gen-grpc-gateway`
- `protoc-gen-openapiv2`
- `protoc-gen-go`
- `protoc-gen-go-grpc`
Make sure that your `$GOBIN` is in your `$PATH`.
### Download the binaries
You may alternatively download the binaries from the [GitHub releases page](https://github.com/grpc-ecosystem/grpc-gateway/releases/latest).
We generate [SLSA3 signatures](slsa.dev) using the OpenSSF's [slsa-framework/slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator) during the release process. To verify a release binary:
1. Install the verification tool from [slsa-framework/slsa-verifier#installation](https://github.com/slsa-framework/slsa-verifier#installation).
2. Download the provenance file `attestation.intoto.jsonl` from the [GitHub releases page](https://github.com/grpc-ecosystem/grpc-gateway/releases/latest).
3. Run the verifier:
```shell
slsa-verifier -artifact-path <the-binary> -provenance attestation.intoto.jsonl -source github.com/grpc-ecosystem/grpc-gateway -tag <the-tag>
```
Alternatively, see the section on remotely managed plugin versions below.
## Usage
### 1.Define your [gRPC](https://grpc.io/docs/) service using protocol buffers
`your_service.proto`:
```protobuf
syntax = "proto3";
package your.service.v1;
option go_package = "github.com/yourorg/yourprotos/gen/go/your/service/v1";
message StringMessage {
string value = 1;
}
service YourService {
rpc Echo(StringMessage) returns (StringMessage) {}
}
```
### 2. Generate gRPC stubs
This step generates the gRPC stubs that you can use to implement the service and consume from clients:
Here's an example `buf.gen.yaml` you can use to generate the stubs with [buf](https://github.com/bufbuild/buf):
```yaml
version: v2
plugins:
- local: protoc-gen-go
out: gen/go
opt:
- paths=source_relative
- local: protoc-gen-go-grpc
out: gen/go
opt:
- paths=source_relative
```
With this file in place, you can generate your files using `buf generate`.
> For a complete example of using `buf generate` to generate protobuf stubs, see
> [the boilerplate repo](https://github.com/johanbrandhorst/grpc-gateway-boilerplate).
> For more information on generating the stubs with buf, see
> [the official documentation](https://docs.buf.build/generate-usage).
If you are using `protoc` to generate stubs, here's an example of what a command
might look like:
```sh
protoc -I . \
--go_out ./gen/go/ --go_opt paths=source_relative \
--go-grpc_out ./gen/go/ --go-grpc_opt paths=source_relative \
your/service/v1/your_service.proto
```
### 3. Implement your service in gRPC as usual.
### 4. Generate reverse-proxy using `protoc-gen-grpc-gateway`
At this point, you have 3 options:
- no further modifications, use the default mapping to HTTP semantics (method, path, etc.)
- this will work on any `.proto` file, but will not allow setting HTTP paths, request parameters or similar
- additional `.proto` modifications to use a custom mapping
- relies on parameters in the `.proto` file to set custom HTTP mappings
- no `.proto` modifications, but use an external configuration file
- relies on an external configuration file to set custom HTTP mappings
- mostly useful when the source proto file isn't under your control
#### 1. Using the default mapping
This requires no additional modification to the `.proto` file but does require enabling a specific option when executing the plugin.
The `generate_unbound_methods` should be enabled.
Here's what a `buf.gen.yaml` file might look like with this option enabled:
```yaml
version: v2
plugins:
- local: protoc-gen-go
out: gen/go
opt:
- paths=source_relative
- local: protoc-gen-go-grpc
out: gen/go
opt:
- paths=source_relative
- local: protoc-gen-grpc-gateway
out: gen/go
opt:
- paths=source_relative
- generate_unbound_methods=true
```
With `protoc` (just the grpc-gateway stubs):
```sh
protoc -I . --grpc-gateway_out ./gen/go \
--grpc-gateway_opt paths=source_relative \
--grpc-gateway_opt generate_unbound_methods=true \
your/service/v1/your_service.proto
```
#### 2. With custom annotations
Add a [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46)
annotation to your .proto file
`your_service.proto`:
```diff
syntax = "proto3";
package your.service.v1;
option go_package = "github.com/yourorg/yourprotos/gen/go/your/service/v1";
+
+import "google/api/annotations.proto";
+
message StringMessage {
string value = 1;
}
service YourService {
- rpc Echo(StringMessage) returns (StringMessage) {}
+ rpc Echo(StringMessage) returns (StringMessage) {
+ option (google.api.http) = {
+ post: "/v1/example/echo"
+ body: "*"
+ };
+ }
}
```
> You will need to provide the required third party protobuf files to the protobuf compiler.
> If you are using [buf](https://github.com/bufbuild/buf), this dependency can
> be added to the `deps` array in your `buf.yaml` under the name
> `buf.build/googleapis/googleapis`:
>
> ```yaml
> version: v2
> name: buf.build/yourorg/myprotos
> deps:
> - buf.build/googleapis/googleapis
> ```
>
> Always run `buf dep update` after adding a dependency to your `buf.yaml`.
See [a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto)
for examples of more annotations you can add to customize gateway behavior
and generated OpenAPI output.
Here's what a `buf.gen.yaml` file might look like:
```yaml
version: v2
plugins:
- local: protoc-gen-go
out: gen/go
opt:
- paths=source_relative
- local: protoc-gen-go-grpc
out: gen/go
opt:
- paths=source_relative
- local: protoc-gen-grpc-gateway
out: gen/go
opt:
- paths=source_relative
```
If you are using `protoc` to generate stubs, you need to ensure the required
dependencies are available to the compiler at compile time. These can be found
by manually cloning and copying the relevant files from the
[googleapis repository](https://github.com/googleapis/googleapis), and providing
them to `protoc` when running. The files you will need are:
```
google/api/annotations.proto
google/api/field_behavior.proto
google/api/http.proto
google/api/httpbody.proto
```
Here's what a `protoc` execution might look like:
```sh
protoc -I . --grpc-gateway_out ./gen/go \
--grpc-gateway_opt paths=source_relative \
your/service/v1/your_service.proto
```
#### 3. External configuration
If you do not want to (or cannot) modify the proto file for use with gRPC-Gateway you can
alternatively use an external
[gRPC Service Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) file.
[Check our documentation](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/grpc_api_configuration/)
for more information. This is best combined with the `standalone=true` option
to generate a file that can live in its own package, separate from the files
generated by the source protobuf file.
Here's what a `buf.gen.yaml` file might look like with this option enabled:
```yaml
version: v2
plugins:
- local: protoc-gen-go
out: gen/go
opt:
- paths=source_relative
- local: protoc-gen-go-grpc
out: gen/go
opt:
- paths=source_relative
- local: protoc-gen-grpc-gateway
out: gen/go
opt:
- paths=source_relative
- grpc_api_configuration=path/to/config.yaml
- standalone=true
```
With `protoc` (just the grpc-gateway stubs):
```sh
protoc -I . --grpc-gateway_out ./gen/go \
--grpc-gateway_opt paths=source_relative \
--grpc-gateway_opt grpc_api_configuration=path/to/config.yaml \
--grpc-gateway_opt standalone=true \
your/service/v1/your_service.proto
```
### 5. Write an entrypoint for the HTTP reverse-proxy server
```go
package main
import (
"context"
"flag"
"net/http"
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"google.golang.org/grpc/grpclog"
gw "github.com/yourorg/yourrepo/proto/gen/go/your/service/v1/your_service" // Update
)
var (
// command-line options:
// gRPC server endpoint
grpcServerEndpoint = flag.String("grpc-server-endpoint", "localhost:9090", "gRPC server endpoint")
)
func run() error {
ctx := context.Background()
ctx, cancel := context.WithCancel(ctx)
defer cancel()
// Register gRPC server endpoint
// Note: Make sure the gRPC server is running properly and accessible
mux := runtime.NewServeMux()
opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())}
err := gw.RegisterYourServiceHandlerFromEndpoint(ctx, mux, *grpcServerEndpoint, opts)
if err != nil {
return err
}
// Start HTTP server (and proxy calls to gRPC server endpoint)
return http.ListenAndServe(":8081", mux)
}
func main() {
flag.Parse()
if err := run(); err != nil {
grpclog.Fatal(err)
}
}
```
### 6. (Optional) Generate OpenAPI definitions using `protoc-gen-openapiv2`
Here's what a `buf.gen.yaml` file might look like:
```yaml
version: v2
plugins:
- local: protoc-gen-go
out: gen/go
opt:
- paths=source_relative
- local: protoc-gen-go-grpc
out: gen/go
opt:
- paths=source_relative
- local: protoc-gen-grpc-gateway
out: gen/go
opt:
- paths=source_relative
- generate_unbound_methods=true
- local: protoc-gen-openapiv2
out: gen/go
```
To use the custom protobuf annotations supported by `protoc-gen-openapiv2`, we need
another dependency added to our protobuf generation step. If you are using
`buf`, you can add the `buf.build/grpc-ecosystem/grpc-gateway` dependency
to your `deps` array:
```yaml
version: v2
name: buf.build/yourorg/myprotos
deps:
- buf.build/googleapis/googleapis
- buf.build/grpc-ecosystem/grpc-gateway
```
With `protoc` (just the swagger file):
```sh
protoc -I . --openapiv2_out ./gen/openapiv2 \
your/service/v1/your_service.proto
```
If you are using `protoc` to generate stubs, you will need to copy the protobuf
files from the `protoc-gen-openapiv2/options` directory of this repository,
and providing them to `protoc` when running.
Note that this plugin also supports generating OpenAPI definitions for unannotated methods;
use the `generate_unbound_methods` option to enable this.
It is possible with the HTTP mapping for a gRPC service method to create duplicate mappings
with the only difference being constraints on the path parameter.
`/v1/{name=projects/*}` and `/v1/{name=organizations/*}` both become `/v1/{name}`. When
this occurs the plugin will rename the path parameter with a "\_1" (or "\_2" etc) suffix
to differentiate the different operations. So in the above example, the 2nd path would become
`/v1/{name_1=organizations/*}`. This can also cause OpenAPI clients to URL encode the "/" that is
part of the path parameter as that is what OpenAPI defines in the specification. To allow gRPC gateway to
accept the URL encoded slash and still route the request, use the UnescapingModeAllCharacters or
UnescapingModeLegacy (which is the default currently though may change in future versions). See
[Customizing Your Gateway](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/customizing_your_gateway/)
for more information.
## Usage with remote plugins
As an alternative to all of the above, you can use `buf` with
[remote plugins](https://buf.build/docs/bsr/remote-plugins/usage)
to manage plugin versions and generation. An example `buf.gen.yaml` using remote
plugin generation looks like this:
```yaml
version: v2
plugins:
- remote: buf.build/protocolbuffers/go:v1.31.0
out: gen/go
opt:
- paths=source_relative
- remote: buf.build/grpc/go:v1.3.0
out: gen/go
opt:
- paths=source_relative
- remote: buf.build/grpc-ecosystem/gateway:v2.16.2
out: gen/go
opt:
- paths=source_relative
- remote: buf.build/grpc-ecosystem/openapiv2:v2.16.2
out: gen/openapiv2
```
This requires no local installation of any plugins. Be careful to use the same
version of the generator as the runtime library, i.e. if using `v2.16.2`, run
```shell
$ go get github.com/grpc-ecosystem/grpc-gateway/v2@v2.16.2
```
To get the same version of the runtime in your `go.mod`.
Note that usage of remote plugins is incompatible with usage of external configuration files like [grpc_api_configuration](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/grpc_api_configuration/#using-an-external-configuration-file).
## Video intro
This GopherCon UK 2019 presentation from our maintainer [@JohanBrandhorst](https://github.com/johanbrandhorst) provides a good intro to using the gRPC-Gateway. It uses the following boilerplate repo as a base: https://github.com/johanbrandhorst/grpc-gateway-boilerplate.
<div align="center">
<a href="https://www.youtube.com/watch?v=Pq1paKC-fXk">
<img src="https://img.youtube.com/vi/Pq1paKC-fXk/0.jpg" />
</a>
</div>
## Parameters and flags
When using `buf` to generate stubs, flags and parameters are passed through
the `opt` field in your `buf.gen.yaml` file, for example:
```yaml
version: v2
plugins:
- local: protoc-gen-grpc-gateway
out: gen/go
opt:
- paths=source_relative
- grpc_api_configuration=path/to/config.yaml
- standalone=true
```
During code generation with `protoc`, flags to gRPC-Gateway tools must be passed
through `protoc` using one of 2 patterns:
- as part of the `--<tool_suffix>_out` `protoc` parameter: `--<tool_suffix>_out=<flags>:<path>`
```sh
--grpc-gateway_out=repeated_path_param_separator=ssv:.
--openapiv2_out=repeated_path_param_separator=ssv:.
```
- using additional `--<tool_suffix>_opt` parameters: `--<tool_suffix>_opt=<flag>[,<flag>]*`
```sh
--grpc-gateway_opt repeated_path_param_separator=ssv
--openapiv2_opt repeated_path_param_separator=ssv
```
## More examples
More examples are available under the `examples` directory.
- `proto/examplepb/echo_service.proto`, `proto/examplepb/a_bit_of_everything.proto`, `proto/examplepb/unannotated_echo_service.proto`: service definition
- `proto/examplepb/echo_service.pb.go`, `proto/examplepb/a_bit_of_everything.pb.go`, `proto/examplepb/unannotated_echo_service.pb.go`: [generated] stub of the service
- `proto/examplepb/echo_service.pb.gw.go`, `proto/examplepb/a_bit_of_everything.pb.gw.go`, `proto/examplepb/uannotated_echo_service.pb.gw.go`: [generated] reverse proxy for the service
- `proto/examplepb/unannotated_echo_service.yaml`: gRPC API Configuration for `unannotated_echo_service.proto`
- `server/main.go`: service implementation
- `main.go`: entrypoint of the generated reverse proxy
To use the same port for custom HTTP handlers (e.g. serving `swagger.json`),
gRPC-Gateway, and a gRPC server, see
[this example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go)
(and its accompanying [blog post](https://web.archive.org/web/20201112010739/https://coreos.com/blog/grpc-protobufs-swagger.html)).
[This example by neiro.ai](https://github.com/mynalabsai/grpc_gateway_media_example) (and its accompanying [blog post](https://medium.com/neiro-ai/grpc-gateway-for-media-api-by-neiro-9033caab12c8)) shows how mediafiles using `multipart/form-data` can be integrated into rpc messages using a middleware.
## Features
### Supported
- Generating JSON API handlers.
- Method parameters in the request body.
- Method parameters in the request path.
- Method parameters in the query string.
- Enum fields in the path parameter (including repeated enum fields).
- Mapping streaming APIs to newline-delimited JSON streams.
- Mapping HTTP headers with `Grpc-Metadata-` prefix to gRPC metadata (prefixed with `grpcgateway-`)
- Optionally emitting API definitions for
[OpenAPI (Swagger) v2](https://swagger.io/docs/specification/2-0/basic-structure/).
- Setting [gRPC timeouts](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests)
through inbound HTTP `Grpc-Timeout` header.
- Partial support for [gRPC API Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config)
files as an alternative to annotation.
- Automatically translating PATCH requests into Field Mask gRPC requests. See
[the docs](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/patch_feature/)
for more information.
- [Protobuf Editions](https://protobuf.dev/editions/overview/) support (edition 2023).
- Go [Opaque API](https://go.dev/blog/protobuf-opaque) support.
### No plan to support
But patches are welcome.
- Method parameters in HTTP headers.
- Handling trailer metadata.
- Encoding request/response body in XML.
- True bi-directional streaming.
## Mapping gRPC to HTTP
- [How gRPC error codes map to HTTP status codes in the response](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/runtime/errors.go#L15).
- HTTP request source IP is added as `X-Forwarded-For` gRPC request header.
- HTTP request host is added as `X-Forwarded-Host` gRPC request header.
- HTTP `Authorization` header is added as `authorization` gRPC request header.
- Remaining Permanent HTTP header keys (as specified by the IANA
[here](http://www.iana.org/assignments/message-headers/message-headers.xhtml))
are prefixed with `grpcgateway-` and added with their values to gRPC request
header.
- HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata
(prefixed with `grpcgateway-`).
- While configurable, the default {un,}marshaling uses
[protojson](https://pkg.go.dev/google.golang.org/protobuf/encoding/protojson).
- The path template used to map gRPC service methods to HTTP endpoints supports the [google.api.http](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto)
path template syntax. For example, `/api/v1/{name=projects/*/topics/*}` or `/prefix/{path=organizations/**}`.
## Contribution
See [CONTRIBUTING.md](http://github.com/grpc-ecosystem/grpc-gateway/blob/main/CONTRIBUTING.md).
## License
gRPC-Gateway is licensed under the BSD 3-Clause License.
See [LICENSE](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/LICENSE) for more details.
================================================
FILE: WORKSPACE
================================================
workspace(name = "grpc_ecosystem_grpc_gateway")
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "bazel_features",
sha256 = "c26b4e69cf02fea24511a108d158188b9d8174426311aac59ce803a78d107648",
strip_prefix = "bazel_features-1.43.0",
url = "https://github.com/bazel-contrib/bazel_features/releases/download/v1.43.0/bazel_features-v1.43.0.tar.gz",
)
load("@bazel_features//:deps.bzl", "bazel_features_deps")
bazel_features_deps()
http_archive(
name = "rules_python",
sha256 = "098ba13578e796c00c853a2161f382647f32eb9a77099e1c88bc5299333d0d6e",
strip_prefix = "rules_python-1.9.0",
url = "https://github.com/bazelbuild/rules_python/releases/download/1.9.0/rules_python-1.9.0.tar.gz",
)
load("@rules_python//python:repositories.bzl", "py_repositories")
py_repositories()
http_archive(
name = "com_google_googletest",
sha256 = "40d4ec942217dcc84a9ebe2a68584ada7d4a33a8ee958755763278ea1c5e18ff",
strip_prefix = "googletest-1.17.0",
urls = ["https://github.com/google/googletest/archive/v1.17.0.zip"],
)
# Define before rules_proto, otherwise we receive the version of com_google_protobuf from there
http_archive(
name = "com_google_protobuf",
sha256 = "a83103b7ed3afaeedee9a212c8f65825444f58144f5e075b73c83f2b4ff27b62",
strip_prefix = "protobuf-34.1",
urls = ["https://github.com/protocolbuffers/protobuf/archive/v34.1.tar.gz"],
)
http_archive(
name = "googleapis",
sha256 = "1ec16c560b6fb94413dedd3f5abca88b72a9047ddec3225e0e654d122f64dd71",
strip_prefix = "googleapis-cba8415718590712af80d0fd90a5f016a2607b25",
urls = [
"https://github.com/googleapis/googleapis/archive/cba8415718590712af80d0fd90a5f016a2607b25.zip",
],
)
load("@googleapis//:repository_rules.bzl", "switched_rules_by_language")
switched_rules_by_language(
name = "com_google_googleapis_imports",
)
http_archive(
name = "bazel_skylib",
sha256 = "3b5b49006181f5f8ff626ef8ddceaa95e9bb8ad294f7b5d7b11ea9f7ddaf8c59",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.9.0/bazel-skylib-1.9.0.tar.gz",
"https://github.com/bazelbuild/bazel-skylib/releases/download/1.9.0/bazel-skylib-1.9.0.tar.gz",
],
)
load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
bazel_skylib_workspace()
http_archive(
name = "rules_proto",
sha256 = "14a225870ab4e91869652cfd69ef2028277fc1dc4910d65d353b62d6e0ae21f4",
strip_prefix = "rules_proto-7.1.0",
urls = [
"https://github.com/bazelbuild/rules_proto/archive/refs/tags/7.1.0.tar.gz",
],
)
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies")
rules_proto_dependencies()
load("@rules_proto//proto:toolchains.bzl", "rules_proto_toolchains")
rules_proto_toolchains()
http_archive(
name = "io_bazel_rules_go",
sha256 = "86d3dc8f59d253524f933aaf2f3c05896cb0b605fc35b460c0b4b039996124c6",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.60.0/rules_go-v0.60.0.zip",
"https://github.com/bazelbuild/rules_go/releases/download/v0.60.0/rules_go-v0.60.0.zip",
],
)
load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
go_rules_dependencies()
go_register_toolchains(version = "1.26.0")
http_archive(
name = "bazel_gazelle",
sha256 = "675114d8b433d0a9f54d81171833be96ebc4113115664b791e6f204d58e93446",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.47.0/bazel-gazelle-v0.47.0.tar.gz",
"https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.47.0/bazel-gazelle-v0.47.0.tar.gz",
],
)
load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies")
# Use gazelle to declare Go dependencies in Bazel.
# gazelle:repository_macro repositories.bzl%go_repositories
load("//:repositories.bzl", "go_repositories")
go_repositories()
# This must be invoked after our explicit dependencies
# See https://github.com/bazelbuild/bazel-gazelle/issues/1115.
gazelle_dependencies()
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
protobuf_deps()
http_archive(
name = "rules_shell",
sha256 = "e17f72732618a6536559b3015dbe190ef592f7b9ba81969ff4bca766c451b3a5",
strip_prefix = "rules_shell-0.7.0",
url = "https://github.com/bazelbuild/rules_shell/releases/download/v0.7.0/rules_shell-v0.7.0.tar.gz",
)
load("@rules_shell//shell:repositories.bzl", "rules_shell_dependencies", "rules_shell_toolchains")
rules_shell_dependencies()
rules_shell_toolchains()
http_archive(
name = "com_github_bazelbuild_buildtools",
sha256 = "f3b800e9f6ca60bdef3709440f393348f7c18a29f30814288a7326285c80aab9",
strip_prefix = "buildtools-8.5.1",
urls = ["https://github.com/bazelbuild/buildtools/archive/v8.5.1.tar.gz"],
)
load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies")
buildifier_dependencies()
================================================
FILE: bin/.gitignore
================================================
/protoc-gen-go
/protoc-gen-go-grpc
/protoc-gen-grpc-gateway
/protoc-gen-openapiv2
================================================
FILE: buf.gen.yaml
================================================
version: v2
plugins:
- remote: buf.build/protocolbuffers/go:v1.35.1
out: .
opt:
- paths=source_relative
- remote: buf.build/grpc/go:v1.5.1
out: .
opt:
- paths=source_relative
- require_unimplemented_servers=false
- local: protoc-gen-grpc-gateway
out: .
opt:
- paths=source_relative
- allow_repeated_fields_in_body=true
- local: protoc-gen-openapiv2
out: .
opt:
- allow_repeated_fields_in_body=true
================================================
FILE: buf.yaml
================================================
version: v1
name: buf.build/grpc-ecosystem/grpc-gateway
deps:
- buf.build/googleapis/googleapis
breaking:
use:
- FILE
lint:
use:
- DEFAULT
ignore_only:
DIRECTORY_SAME_PACKAGE:
- examples/internal/proto/examplepb/a_bit_of_everything.proto
- examples/internal/proto/examplepb/camel_case_service.proto
- examples/internal/proto/examplepb/echo_service.proto
- examples/internal/proto/examplepb/enum_with_single_value.proto
- examples/internal/proto/examplepb/flow_combination.proto
- examples/internal/proto/examplepb/generate_unbound_methods.proto
- examples/internal/proto/examplepb/generated_input.proto
- examples/internal/proto/examplepb/excess_body.proto
- examples/internal/proto/examplepb/non_standard_names.proto
- examples/internal/proto/examplepb/opaque.proto
- examples/internal/proto/examplepb/openapi_merge_a.proto
- examples/internal/proto/examplepb/openapi_merge_b.proto
- examples/internal/proto/examplepb/proto3_field_semantics.proto
- examples/internal/proto/examplepb/response_body_service.proto
- examples/internal/proto/examplepb/stream.proto
- examples/internal/proto/examplepb/unannotated_echo_service.proto
- examples/internal/proto/examplepb/visibility_rule_echo_service.proto
- examples/internal/proto/examplepb/use_go_template.proto
- examples/internal/proto/examplepb/ignore_comment.proto
- examples/internal/proto/examplepb/remove_internal_comment.proto
- examples/internal/proto/examplepb/wrappers.proto
ENUM_PASCAL_CASE:
- examples/internal/proto/sub/camel_case_message.proto
ENUM_VALUE_PREFIX:
- examples/internal/proto/examplepb/a_bit_of_everything.proto
- examples/internal/proto/examplepb/response_body_service.proto
- examples/internal/proto/pathenum/path_enum.proto
- protoc-gen-openapiv2/options/openapiv2.proto
- runtime/internal/examplepb/example.proto
- runtime/internal/examplepb/proto3.proto
ENUM_ZERO_VALUE_SUFFIX:
- examples/internal/proto/examplepb/a_bit_of_everything.proto
- examples/internal/proto/examplepb/response_body_service.proto
- examples/internal/proto/pathenum/path_enum.proto
- protoc-gen-openapiv2/options/openapiv2.proto
- runtime/internal/examplepb/example.proto
- runtime/internal/examplepb/proto3.proto
FIELD_LOWER_SNAKE_CASE:
- examples/internal/helloworld/helloworld.proto
- examples/internal/proto/examplepb/a_bit_of_everything.proto
- examples/internal/proto/examplepb/non_standard_names.proto
- runtime/internal/examplepb/example.proto
- runtime/internal/examplepb/non_standard_names.proto
MESSAGE_PASCAL_CASE:
- examples/internal/proto/sub/camel_case_message.proto
PACKAGE_DIRECTORY_MATCH:
- examples/internal/helloworld/helloworld.proto
- examples/internal/proto/examplepb/a_bit_of_everything.proto
- examples/internal/proto/examplepb/camel_case_service.proto
- examples/internal/proto/examplepb/echo_service.proto
- examples/internal/proto/examplepb/enum_with_single_value.proto
- examples/internal/proto/examplepb/flow_combination.proto
- examples/internal/proto/examplepb/generate_unbound_methods.proto
- examples/internal/proto/examplepb/generated_input.proto
- examples/internal/proto/examplepb/excess_body.proto
- examples/internal/proto/examplepb/non_standard_names.proto
- examples/internal/proto/examplepb/opaque.proto
- examples/internal/proto/examplepb/openapi_merge_a.proto
- examples/internal/proto/examplepb/openapi_merge_b.proto
- examples/internal/proto/examplepb/proto3_field_semantics.proto
- examples/internal/proto/examplepb/response_body_service.proto
- examples/internal/proto/examplepb/stream.proto
- examples/internal/proto/examplepb/unannotated_echo_service.proto
- examples/internal/proto/examplepb/visibility_rule_echo_service.proto
- examples/internal/proto/examplepb/use_go_template.proto
- examples/internal/proto/examplepb/ignore_comment.proto
- examples/internal/proto/examplepb/remove_internal_comment.proto
- examples/internal/proto/examplepb/wrappers.proto
- examples/internal/proto/oneofenum/oneof_enum.proto
- examples/internal/proto/pathenum/path_enum.proto
- examples/internal/proto/sub/camel_case_message.proto
- examples/internal/proto/sub/message.proto
- examples/internal/proto/sub2/message.proto
- internal/descriptor/apiconfig/apiconfig.proto
- internal/descriptor/openapiconfig/openapiconfig.proto
- protoc-gen-openapiv2/options/annotations.proto
- protoc-gen-openapiv2/options/openapiv2.proto
- runtime/internal/examplepb/example.proto
- runtime/internal/examplepb/non_standard_names.proto
- runtime/internal/examplepb/proto2.proto
- runtime/internal/examplepb/proto3.proto
PACKAGE_SAME_GO_PACKAGE:
- examples/internal/proto/examplepb/a_bit_of_everything.proto
- examples/internal/proto/examplepb/camel_case_service.proto
- examples/internal/proto/examplepb/echo_service.proto
- examples/internal/proto/examplepb/enum_with_single_value.proto
- examples/internal/proto/examplepb/flow_combination.proto
- examples/internal/proto/examplepb/generate_unbound_methods.proto
- examples/internal/proto/examplepb/generated_input.proto
- examples/internal/proto/examplepb/excess_body.proto
- examples/internal/proto/examplepb/non_standard_names.proto
- examples/internal/proto/examplepb/opaque.proto
- examples/internal/proto/examplepb/proto3_field_semantics.proto
- examples/internal/proto/examplepb/response_body_service.proto
- examples/internal/proto/examplepb/stream.proto
- examples/internal/proto/examplepb/unannotated_echo_service.proto
- examples/internal/proto/examplepb/visibility_rule_echo_service.proto
- examples/internal/proto/examplepb/use_go_template.proto
- examples/internal/proto/examplepb/ignore_comment.proto
- examples/internal/proto/examplepb/remove_internal_comment.proto
- examples/internal/proto/examplepb/wrappers.proto
- runtime/internal/examplepb/example.proto
- runtime/internal/examplepb/non_standard_names.proto
- runtime/internal/examplepb/proto2.proto
- runtime/internal/examplepb/proto3.proto
PACKAGE_VERSION_SUFFIX:
- examples/internal/helloworld/helloworld.proto
- examples/internal/proto/examplepb/a_bit_of_everything.proto
- examples/internal/proto/examplepb/camel_case_service.proto
- examples/internal/proto/examplepb/echo_service.proto
- examples/internal/proto/examplepb/enum_with_single_value.proto
- examples/internal/proto/examplepb/flow_combination.proto
- examples/internal/proto/examplepb/generate_unbound_methods.proto
- examples/internal/proto/examplepb/generated_input.proto
- examples/internal/proto/examplepb/excess_body.proto
- examples/internal/proto/examplepb/non_standard_names.proto
- examples/internal/proto/examplepb/opaque.proto
- examples/internal/proto/examplepb/openapi_merge_a.proto
- examples/internal/proto/examplepb/openapi_merge_b.proto
- examples/internal/proto/examplepb/proto3_field_semantics.proto
- examples/internal/proto/examplepb/response_body_service.proto
- examples/internal/proto/examplepb/stream.proto
- examples/internal/proto/examplepb/unannotated_echo_service.proto
- examples/internal/proto/examplepb/visibility_rule_echo_service.proto
- examples/internal/proto/examplepb/use_go_template.proto
- examples/internal/proto/examplepb/ignore_comment.proto
- examples/internal/proto/examplepb/remove_internal_comment.proto
- examples/internal/proto/examplepb/wrappers.proto
- examples/internal/proto/oneofenum/oneof_enum.proto
- examples/internal/proto/pathenum/path_enum.proto
- examples/internal/proto/sub/camel_case_message.proto
- examples/internal/proto/sub/message.proto
- examples/internal/proto/sub2/message.proto
- internal/descriptor/apiconfig/apiconfig.proto
- internal/descriptor/openapiconfig/openapiconfig.proto
- protoc-gen-openapiv2/options/annotations.proto
- protoc-gen-openapiv2/options/openapiv2.proto
- runtime/internal/examplepb/example.proto
- runtime/internal/examplepb/non_standard_names.proto
- runtime/internal/examplepb/proto2.proto
- runtime/internal/examplepb/proto3.proto
RPC_PASCAL_CASE:
- examples/internal/proto/examplepb/camel_case_service.proto
RPC_REQUEST_RESPONSE_UNIQUE:
- examples/internal/proto/examplepb/a_bit_of_everything.proto
- examples/internal/proto/examplepb/echo_service.proto
- examples/internal/proto/examplepb/flow_combination.proto
- examples/internal/proto/examplepb/generate_unbound_methods.proto
- examples/internal/proto/examplepb/generated_input.proto
- examples/internal/proto/examplepb/excess_body.proto
- examples/internal/proto/examplepb/openapi_merge_a.proto
- examples/internal/proto/examplepb/openapi_merge_b.proto
- examples/internal/proto/examplepb/response_body_service.proto
- examples/internal/proto/examplepb/stream.proto
- examples/internal/proto/examplepb/unannotated_echo_service.proto
- examples/internal/proto/examplepb/visibility_rule_echo_service.proto
- examples/internal/proto/examplepb/wrappers.proto
RPC_REQUEST_STANDARD_NAME:
- examples/internal/helloworld/helloworld.proto
- examples/internal/proto/examplepb/a_bit_of_everything.proto
- examples/internal/proto/examplepb/echo_service.proto
- examples/internal/proto/examplepb/flow_combination.proto
- examples/internal/proto/examplepb/generate_unbound_methods.proto
- examples/internal/proto/examplepb/generated_input.proto
- examples/internal/proto/examplepb/excess_body.proto
- examples/internal/proto/examplepb/non_standard_names.proto
- examples/internal/proto/examplepb/openapi_merge_a.proto
- examples/internal/proto/examplepb/openapi_merge_b.proto
- examples/internal/proto/examplepb/response_body_service.proto
- examples/internal/proto/examplepb/stream.proto
- examples/internal/proto/examplepb/unannotated_echo_service.proto
- examples/internal/proto/examplepb/visibility_rule_echo_service.proto
- examples/internal/proto/examplepb/wrappers.proto
- runtime/internal/examplepb/non_standard_names.proto
RPC_RESPONSE_STANDARD_NAME:
- examples/internal/helloworld/helloworld.proto
- examples/internal/proto/examplepb/a_bit_of_everything.proto
- examples/internal/proto/examplepb/echo_service.proto
- examples/internal/proto/examplepb/flow_combination.proto
- examples/internal/proto/examplepb/generate_unbound_methods.proto
- examples/internal/proto/examplepb/generated_input.proto
- examples/internal/proto/examplepb/excess_body.proto
- examples/internal/proto/examplepb/non_standard_names.proto
- examples/internal/proto/examplepb/openapi_merge_a.proto
- examples/internal/proto/examplepb/openapi_merge_b.proto
- examples/internal/proto/examplepb/response_body_service.proto
- examples/internal/proto/examplepb/stream.proto
- examples/internal/proto/examplepb/unannotated_echo_service.proto
- examples/internal/proto/examplepb/visibility_rule_echo_service.proto
- examples/internal/proto/examplepb/use_go_template.proto
- examples/internal/proto/examplepb/ignore_comment.proto
- examples/internal/proto/examplepb/remove_internal_comment.proto
- examples/internal/proto/examplepb/wrappers.proto
- runtime/internal/examplepb/non_standard_names.proto
SERVICE_PASCAL_CASE:
- examples/internal/proto/examplepb/a_bit_of_everything.proto
- examples/internal/proto/examplepb/camel_case_service.proto
SERVICE_SUFFIX:
- examples/internal/helloworld/helloworld.proto
- examples/internal/proto/examplepb/a_bit_of_everything.proto
- examples/internal/proto/examplepb/camel_case_service.proto
- examples/internal/proto/examplepb/flow_combination.proto
- examples/internal/proto/examplepb/openapi_merge_a.proto
- examples/internal/proto/examplepb/openapi_merge_b.proto
allow_comment_ignores: true
# Note: the build configuration goes last in this
# files so we can append excludes at push time.
build:
excludes:
- bazel-grpc-gateway
================================================
FILE: docs/.gitignore
================================================
*.gem
.bundle
.ruby-version
.jekyll-cache
.sass-cache
_site
================================================
FILE: docs/Gemfile
================================================
source "https://rubygems.org"
gem "just-the-docs"
group :jekyll_plugins do
gem "github-pages" # GitHub Pages
gem "jekyll-optional-front-matter" # GitHub Pages
gem "jekyll-default-layout" # GitHub Pages
gem "jekyll-titles-from-headings" # GitHub Pages
gem "jekyll-readme-index" # GitHub Pages
gem "jekyll-relative-links" # GitHub Pages
gem 'jekyll-include-cache' # GitHub Pages
end
================================================
FILE: docs/_config.yml
================================================
# Site settings
# These are used to personalize your new site. If you look in the HTML files,
# you will see them accessed via {{ site.title }}, {{ site.github_repo }}, and so on.
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.
title: gRPC-Gateway
description: gRPC-Gateway Documentation Website
baseurl: "/grpc-gateway" # the subpath of your site, e.g. /blog
url: "https://grpc-ecosystem.github.io" # the base hostname & protocol for your site, e.g. http://example.com
repository: grpc-ecosystem/grpc-gateway
remote_theme: pmarsceill/just-the-docs@v0.6.2
permalink: pretty
exclude: ["run.sh"]
# Set a path/url to a logo that will be displayed instead of the title
#logo: "/assets/images/grpc-gateway.png"
# Enable or disable the site search
# Supports true (default) or false
search_enabled: true
search:
# Split pages into sections that can be searched individually
# Supports 1 - 6, default: 2
heading_level: 2
# Maximum amount of previews per search result
# Default: 3
previews: 2
# Maximum amount of words to display before a matched word in the preview
# Default: 5
preview_words_before: 3
# Maximum amount of words to display after a matched word in the preview
# Default: 10
preview_words_after: 3
# Set the search token separator
# Default: /[\s\-/]+/
# Example: enable support for hyphenated search words
tokenizer_separator: /[\s/]+/
# Display the relative url in search results
# Supports true (default) or false
rel_url: true
# Enable or disable the search button that appears in the bottom right corner of every page
# Supports true or false (default)
button: false
# Enable or disable heading anchors
heading_anchors: true
# Aux links for the upper right navigation
aux_links:
"gRPC-Gateway on GitHub":
- "https://github.com/grpc-ecosystem/grpc-gateway"
# Makes Aux links open in a new tab. Default is false
aux_links_new_tab: false
# Sort order for navigation links
# nav_sort: case_insensitive # default, equivalent to nil
nav_sort: case_sensitive # Capital letters sorted before lowercase
# Footer content
# appears at the bottom of every page's main content
# Back to top link
back_to_top: true
back_to_top_text: "Back to top"
footer_content: 'Copyright © the gRPC-Gateway Authors. Distributed by a <a href="https://github.com/grpc-ecosystem/grpc-gateway/tree/main/LICENSE">BSD 3-Clause License.</a>'
# Footer last edited timestamp
last_edit_timestamp: true # show or hide edit time - page must have `last_modified_date` defined in the frontmatter
last_edit_time_format: "%b %e %Y at %I:%M %p" # uses ruby's time format: https://ruby-doc.org/stdlib-2.7.0/libdoc/time/rdoc/Time.html
# Footer "Edit this page on GitHub" link text
gh_edit_link: true # show or hide edit this page link
gh_edit_link_text: "Edit this page on GitHub"
gh_edit_repository: "https://github.com/grpc-ecosystem/grpc-gateway" # the github URL for your repo
gh_edit_branch: "main" # the branch that your docs is served from
gh_edit_source: docs # the source that your files originate from
gh_edit_view_mode: "tree" # "tree" or "edit" if you want the user to jump into the editor immediately
# Color scheme currently only supports "dark", "light"/nil (default), or a custom scheme that you define
color_scheme: nil
# Disqus Comments
# disqus:
# Leave shortname blank to disable comments site-wide.
# Enable comments for any post by adding `comments: true` to that post's YAML Front Matter.
# shortname:
# Google Analytics Tracking
# e.g, UA-1234567-89
# ga_tracking:
# ga_tracking_anonymize_ip: true # Use GDPR compliant Google Analytics settings (true/nil by default)
plugins:
- jekyll-seo-tag
- jekyll-include-cache
kramdown:
syntax_highlighter_opts:
block:
line_numbers: false
compress_html:
clippings: all
comments: all
endings: all
startings: []
blanklines: false
profile: false
# ignore:
# envs: all
================================================
FILE: docs/_layouts/default.html
================================================
---
layout: table_wrappers
---
<!DOCTYPE html>
<html lang="{{ site.lang | default: 'en-US' }}">
{% include head.html %}
<body>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="svg-link" viewBox="0 0 24 24">
<title>Link</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
</svg>
</symbol>
<symbol id="svg-search" viewBox="0 0 24 24">
<title>Search</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
<circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
</svg>
</symbol>
<symbol id="svg-menu" viewBox="0 0 24 24">
<title>Menu</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
<line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</symbol>
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
<title>Expand</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</symbol>
<symbol id="svg-doc" viewBox="0 0 24 24">
<title>Document</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
<path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
</svg>
</symbol>
</svg>
<div class="side-bar">
<div class="site-header">
<a href="{{ '/' | absolute_url }}" class="site-title lh-tight">{% include title.html %}</a>
<a href="#" id="menu-button" class="site-button">
<svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
</a>
</div>
<nav role="navigation" aria-label="Main" id="site-nav" class="site-nav">
{% if site.just_the_docs.collections %}
{% assign collections_size = site.just_the_docs.collections | size %}
{% for collection_entry in site.just_the_docs.collections %}
{% assign collection_key = collection_entry[0] %}
{% assign collection_value = collection_entry[1] %}
{% assign collection = site[collection_key] %}
{% if collection_value.nav_exclude != true %}
{% if collections_size > 1 %}
<div class="nav-category">{{ collection_value.name }}</div>
{% endif %}
{% include nav.html pages=collection %}
{% endif %}
{% endfor %}
{% else %}
{% include nav.html pages=site.html_pages %}
{% endif %}
</nav>
<footer class="site-footer">
This site uses <a href="https://github.com/pmarsceill/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
</footer>
</div>
<div class="main" id="top">
<div id="main-header" class="main-header">
{% if site.search_enabled != false %}
<div class="search">
<div class="search-input-wrap">
<input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search {{ site.title }}" aria-label="Search {{ site.title }}" autocomplete="off">
<label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
</div>
<div id="search-results" class="search-results"></div>
</div>
{% endif %}
{% if site.aux_links %}
<nav aria-label="Auxiliary" class="aux-nav">
<ul class="aux-nav-list">
{% for link in site.aux_links %}
<li class="aux-nav-list-item">
<a href="{{ link.last }}" class="site-button"
{% if site.aux_links_new_tab %}
target="_blank" rel="noopener noreferrer"
{% endif %}
>
{{ link.first }}
</a>
</li>
{% endfor %}
</ul>
</nav>
{% endif %}
</div>
<div id="main-content-wrap" class="main-content-wrap">
{% unless page.url == "/" %}
{% if page.parent %}
<nav aria-label="Breadcrumb" class="breadcrumb-nav">
<ol class="breadcrumb-nav-list">
{% if page.grand_parent %}
<li class="breadcrumb-nav-list-item"><a href="{{ first_level_url }}">{{ page.grand_parent }}</a></li>
<li class="breadcrumb-nav-list-item"><a href="{{ second_level_url }}">{{ page.parent }}</a></li>
{% else %}
<li class="breadcrumb-nav-list-item"><a href="{{ first_level_url }}">{{ page.parent }}</a></li>
{% endif %}
<li class="breadcrumb-nav-list-item"><span>{{ page.title }}</span></li>
</ol>
</nav>
{% endif %}
{% endunless %}
<div id="main-content" class="main-content" role="main">
{% if site.heading_anchors != false %}
{% include vendor/anchor_headings.html html=content beforeHeading="true" anchorBody="<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><use xlink:href=\"#svg-link\"></use></svg>" anchorClass="anchor-heading" anchorAttrs="aria-labelledby=\"%html_id%\"" %}
{% else %}
{{ content }}
{% endif %}
{% if page.has_children == true and page.has_toc != false %}
<hr>
<h2 class="text-delta">Table of contents</h2>
<ul>
{%- assign children_list = pages_list | where: "parent", page.title | where: "grand_parent", page.parent -%}
{% for child in children_list %}
<li>
<a href="{{ child.url | absolute_url }}">{{ child.title }}</a>{% if child.summary %} - {{ child.summary }}{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
{% if site.footer_content != nil or site.last_edit_timestamp or site.gh_edit_link %}
<hr>
<footer>
{% if site.back_to_top %}
<p><a href="#top" id="back-to-top">{{ site.back_to_top_text }}</a></p>
{% endif %}
{% if site.footer_content != nil %}
<p class="text-small text-grey-dk-000 mb-0">{{ site.footer_content }}</p>
{% endif %}
{% if site.last_edit_timestamp or site.gh_edit_link %}
<div class="d-flex mt-2">
{% if site.last_edit_timestamp and site.last_edit_time_format and page.last_modified_date %}
<p class="text-small text-grey-dk-000 mb-0 mr-2">
Page last modified: <span class="d-inline-block">{{ page.last_modified_date | date: site.last_edit_time_format }}</span>.
</p>
{% endif %}
{% if
site.gh_edit_link and
site.gh_edit_link_text and
site.gh_edit_repository and
site.gh_edit_branch and
site.gh_edit_view_mode
%}
<p class="text-small text-grey-dk-000 mb-0">
<a href="{{ site.gh_edit_repository }}/{{ site.gh_edit_view_mode }}/{{ site.gh_edit_branch }}{% if site.gh_edit_source %}/{{ site.gh_edit_source }}{% endif %}/{{ page.path }}" id="edit-this-page">{{ site.gh_edit_link_text }}</a>
</p>
{% endif %}
</div>
{% endif %}
{% if site.disqus.shortname %}
{% include comments.html %}
{% endif %}
</footer>
{% endif %}
</div>
</div>
{% if site.search_enabled != false %}
{% if site.search.button %}
<a href="#" id="search-button" class="search-button">
<svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-search"></use></svg>
</a>
{% endif %}
<div class="search-overlay"></div>
{% endif %}
</div>
</body>
</html>
================================================
FILE: docs/docs/contributing/2020_season_of_docs.md
================================================
---
layout: default
title: Google Season of Docs
nav_order: 1
parent: Contributing
---
# 2020 Season of Docs
<div align="center">
<img src="https://developers.google.com/season-of-docs/images/logo/SeasonofDocs_Logo_SecondaryGrey_300ppi.png" />
</div>
The gRPC-Gateway participated in the 2020 [Google Season of Docs](https://g.co/seasonofdocs).
The project was completed by [@iamrajiv](https://github.com/iamrajiv). A summary of the project
work can be found in the
[project report](https://github.com/iamrajiv/GSoD-2020/blob/master/GSoD_2020_Project_Report.md).
================================================
FILE: docs/docs/contributing/getting_started.md
================================================
---
layout: default
title: Getting started
nav_order: 0
parent: Contributing
---
# How to contribute
See [CONTRIBUTING.md](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/CONTRIBUTING.md).
================================================
FILE: docs/docs/contributing/index.md
================================================
---
layout: default
title: Contributing
nav_order: 5
has_children: true
---
================================================
FILE: docs/docs/development/grpc-gateway_v2_migration_guide.md
================================================
---
layout: default
title: gRPC-Gateway v2 migration guide
nav_order: 0
parent: Development
---
# gRPC-Gateway v2 migration guide
This guide is supposed to help users of the gateway migrate from v1 to v2. See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/1223) for detailed information on all changes that were made specifically to v2.
The following behavioural defaults have been changed:
## protoc-gen-swagger has been renamed protoc-gen-openapiv2
See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/675)
for more information. Apart from the new name, the only real difference to users will be a slightly different proto annotation:
```protobuf
import "protoc-gen-openapiv2/options/annotations.proto";
```
instead of
```protobuf
import "protoc-gen-swagger/options/annotations.proto";
```
and
```protobuf
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {
```
instead of
```protobuf
option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = {
```
The Bazel rule has been renamed `protoc_gen_openapiv2`.
## The example field in the OpenAPI annotations is now a string
This was a `google.protobuf.Any` type, but it was only used for the JSON representation, and it was breaking some tools and it was generally unclear to the user how it works. It is now a string instead. The value is copied verbatim to the output OpenAPI file. Remember to escape any quotes in the strings.
For example, if you had an example that looked like this:
```protobuf
example: { value: '{ "uuid": "0cf361e1-4b44-483d-a159-54dabdf7e814" }' }
```
It would now look like this:
```protobuf
example: "{\"uuid\": \"0cf361e1-4b44-483d-a159-54dabdf7e814\"}"
```
See [a_bit_of_everything.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/examples/internal/proto/examplepb/a_bit_of_everything.proto) in the example protos for more examples.
## We now use the camelCase JSON names by default
See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/375) and
[original pull request](https://github.com/grpc-ecosystem/grpc-gateway/pull/540) for more information.
If you want to revert to the old behaviour, configure a custom marshaler with `UseProtoNames: true`:
```go
mux := runtime.NewServeMux(
runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.HTTPBodyMarshaler{
Marshaler: &runtime.JSONPb{
MarshalOptions: protojson.MarshalOptions{
UseProtoNames: true,
EmitUnpopulated: true,
},
UnmarshalOptions: protojson.UnmarshalOptions{
DiscardUnknown: true,
},
},
}),
)
```
To change the OpenAPI generator behaviour to match, set `json_names_for_fields=false` when generating:
```sh
--openapiv2_out=json_names_for_fields=false:./gen/openapiv2 path/to/my/proto/v1/myproto.proto
```
If using the Bazel rule, set `json_names_for_fields=False`.
## We now emit default values for all fields
See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/233)
for more information.
If you want to revert to the old behaviour, configure a custom marshaler with
`EmitUnpopulated: false`:
```go
mux := runtime.NewServeMux(
runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.HTTPBodyMarshaler{
Marshaler: &runtime.JSONPb{
MarshalOptions: protojson.MarshalOptions{
EmitUnpopulated: false,
},
UnmarshalOptions: protojson.UnmarshalOptions{
DiscardUnknown: true,
},
},
}),
)
```
## We now support google.api.HttpBody message types by default
The `runtime.SetHTTPBodyMarshaler` function has disappeared, and is now
enabled by default. If you for some reason don't want `HttpBody` messages to be
respected, you can disable it by overwriting the default marshaler with one which
does not wrap `runtime.JSONPb` in `runtime.HTTPBodyMarshaler`:
```go
mux := runtime.NewServeMux(
runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{
MarshalOptions: protojson.MarshalOptions{
EmitUnpopulated: true,
},
UnmarshalOptions: protojson.UnmarshalOptions{
DiscardUnknown: true,
},
}),
)
```
## runtime.DisallowUnknownFields has been removed
All marshalling settings are now inherited from the configured marshaler. If you wish
to disallow unknown fields, configure a custom marshaler:
```go
mux := runtime.NewServeMux(
runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.HTTPBodyMarshaler{
Marshaler: &runtime.JSONPb{
MarshalOptions: protojson.MarshalOptions{
EmitUnpopulated: true,
},
UnmarshalOptions: protojson.UnmarshalOptions{
DiscardUnknown: false,
},
},
}),
)
```
## WithLastMatchWins and allow_colon_final_segments=true is now default behaviour
If you were previously specifying these, please remove them, as this is now
the default behaviour. See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/224) for more information.
There is no workaround for this, as we considered it a correct interpretation of the spec. If this breaks your application, carefully consider the order in which you define your services.
## Error handling configuration has been overhauled
`runtime.HTTPError`, `runtime.OtherErrorHandler`, `runtime.GlobalHTTPErrorHandler`, `runtime.WithProtoErrorHandler` are all gone. Error handling is rewritten around the use of gRPCs Status types. If you wish to configure how the gateway handles errors, please use `runtime.WithErrorHandler` and `runtime.WithStreamErrorHandler`. To handle routing errors (similar to the removed `runtime.OtherErrorHandler`) please use `runtime.WithRoutingErrorHandler`.
## Default query parameter parsing behaviour change
The default behaviour for query parameter parsing has changed to return an `InvalidArgument` (`400 Bad Request`) error when more than one of the same matching query parameters is parsed. Previously, it would log but not return an error, using the first query parameter that matched and ignoring any others. See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/2632) for more information.
================================================
FILE: docs/docs/development/index.md
================================================
---
layout: default
title: Development
nav_order: 4
has_children: true
---
================================================
FILE: docs/docs/development/installation_for_cygwin.md
================================================
---
layout: default
title: Installation for Cygwin
nav_order: 1
parent: Development
---
# Installation for Cygwin
<div>
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Cygwin_logo.svg/1024px-Cygwin_logo.svg.png" width="145"/>
</div>
## Installation
First, you need to install the [Go language](https://golang.org/dl/). Please install the latest version, not the one that is listed here.
wget -N https://storage.googleapis.com/golang/go1.8.1.windows-amd64.msi
msiexec /i go1.8.1.windows-amd64.msi /passive /promptrestart
Then you need to install [ProtocolBuffers 3.0.0-beta-3](https://github.com/google/protobuf/releases) or later. Use the Windows release as no native Cygwin `protoc` with version 3 is available yet.
wget -N https://github.com/google/protobuf/releases/download/v3.2.0/protoc-3.2.0-win32.zip`
7z x protoc-3.2.0-win32.zip -o/usr/local/
Then you need to set up your Go workspace. Create the workspace dir.
mkdir /home/user/go
mkdir /home/user/go/bin
mkdir /home/user/go/pkg
mkdir /home/user/go/src
From an elevated cmd.exe prompt set the GOPATH variable in Windows and add the `$GOPATH/bin` directory to your path using `reg add` instead of `setx` because [setx can truncate your PATH variable to 1024 characters](https://encrypted.google.com/search?hl=en&q=setx%20truncates%20PATH%201024#safe=off&hl=en&q=setx+truncated+PATH+1024).
setx GOPATH c:\path\to\your\cygwin\home\user\go /M
set pathkey="HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment"
for /F "usebackq skip=2 tokens=2*" %A IN (`reg query %pathkey% /v Path`) do (reg add %pathkey% /f /v Path /t REG_SZ /d "%B;c:\path\to\your\cygwin\home\user\go\bin")
Then `go get -u -v` the following packages:
go get -u -v github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway
go get -u -v github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2
go get -u -v google.golang.org/protobuf/cmd/protoc-gen-go
go get -u -v google.golang.org/grpc/cmd/protoc-gen-go-grpc
This will probably fail with a similar output to this:
github.com/grpc-ecosystem/grpc-gateway (download)
# cd .; git clone https://github.com/grpc-ecosystem/grpc-gateway C:\path\to\your\cygwin\home\user\go\src\github.com\grpc-ecosystem\grpc-gateway
Cloning into 'C:\path\to\your\cygwin\home\user\go\src\github.com\grpc-ecosystem\grpc-gateway'...
fatal: Invalid path '/home/user/go/C:\path\to\your\cygwin\home\user\go\src\github.com\grpc-ecosystem\grpc-gateway': No such file or directory
package github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway: exit status 128
To fix this you need to run the `go get -u -v` commands and look for all lines starting with `# cd .;`. Copy and paste these lines into your shell and change the clone destination directories.
git clone https://github.com/grpc-ecosystem/grpc-gateway $(cygpath -u $GOPATH)/src/github.com/grpc-ecosystem/grpc-gateway
git clone https://github.com/golang/protobuf $(cygpath -u $GOPATH)/src/github.com/golang/protobuf
git clone https://github.com/google/go-genproto $(cygpath -u $GOPATH)/src/google.golang.org/genproto
Once the clone operations are finished the `go get -u -v` commands shouldn't give you an error anymore.
## Usage
Follow the [instructions](https://github.com/grpc-ecosystem/grpc-gateway#usage) in the [README](https://github.com/grpc-ecosystem/grpc-gateway#readme).
Adjust steps 3, 5 and 7 like this. `protoc` expects native Windows paths.
protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src --go_out=. --go-grpc_out=. ./path/to/your_service.proto
protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src ./path/to/your_service.proto
protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src ./path/to/your_service.proto
Then `cd` into the directory where your entry-point `main.go` file is located and run:
go get -v
This will fail in this same way as it did during the installation. Look for all lines starting with `# cd .;`. Copy and paste these lines into your shell and change the clone destination directories.
git clone https://go.googlesource.com/net $(cygpath -u $GOPATH)/src/golang.org/x/net
git clone https://go.googlesource.com/text $(cygpath -u $GOPATH)/src/golang.org/x/text
git clone https://github.com/grpc/grpc-go $(cygpath -u $GOPATH)/src/google.golang.org/grpc
Once the clone operations are finished the `go get -v` commands shouldn't give you an error anymore.
Then run:
go install
This will compile and install your gRPC-Gateway service into `$GOPATH/bin`.
================================================
FILE: docs/docs/faq.md
================================================
---
layout: default
title: FAQ
nav_order: 7
---
# FAQ
## How can I write the annotations which gRPC-Gateway requires?
The gRPC-Gateway follows the spec of [`google.api.HttpRule`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto), so first check out the documentation if it is feasible in the spec.
For situations where annotating the proto file is not an option please reference the documentation on [gRPC API Configuration](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/grpc_api_configuration/)
See also [a past discussion](https://groups.google.com/d/msg/grpc-io/Xqx80hG0D44/VNCDHjeE6pUJ) in the grpc-io mailing list.
## I want to support a certain style of HTTP request but the code generated by gRPC-Gateway does not. How can I support this style?
See the question above at first.
The gRPC-Gateway is intended to cover 80% of use cases without forcing you to write comprehensive but complicated annotations. So the gateway itself does not always cover all the use cases you have by design. In other words, the gateway automates typical boring boilerplate mapping between gRPC and HTTP/1 communication, but it does not do arbitrarily complex custom mappings for you.
On the other hand, you can still add whatever you want as a middleware which wraps
[`runtime.ServeMux`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ServeMux). Since `runtime.ServeMux` is just a standard [`http.Handler`](http://golang.org/pkg/http#Handler), you can easily write a custom wrapper of `runtime.ServeMux`, leveraged with existing third-party libraries in Go (e.g. [gateway main.go program](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/examples/internal/gateway/main.go)).
## My gRPC server is written in (Scala or C++ or Ruby or Haskell etc). Is there a (Scala or C++ or Ruby or Haskell etc) version of gRPC-Gateway?
As of now, No. But it should not be a big issue because the reverse-proxy which gRPC-Gateway generates usually works as an independent process and communicates with your gRPC server over TCP or a Unix domain sockets (Unix systems only).
## Why are the models in the OpenAPI specification prefixed with the last part of the proto package name?
The reason to generate the prefixes is that we don't have a guaranteed unique namespace. If two packages produce different `Foo` messages then we will have trouble.
## Why not strip the prefix?
When a message is added which happens to conflict with another message (e.g. by importing a message with the same name from a different package) it will break code that is very far away from the code that changed. This is in an effort to adhere to the [principle of least astonishment](https://en.wikipedia.org/wiki/Principle_of_least_astonishment).
## What is the difference between the gRPC-Gateway and grpc-httpjson-transcoding?
The gRPC-Gateway is a generator that generates a Go implementation of a JSON/HTTP-gRPC reverse proxy based on annotations in your proto file, while the [grpc-httpjson-transcoding](https://github.com/grpc-ecosystem/grpc-httpjson-transcoding) library doesn't require the generation step, it uses protobuf descriptors as config. It can be used as a component of an existing proxy. Google Cloud Endpoints and the gRPC-JSON transcoder filter in Envoy are using this.
<!-- TODO(v3): remove this note when default behavior matches Envoy/Cloud Endpoints -->
**Behavior differences:**
- By default, gRPC-Gateway does not escape path parameters in the same way. [This can be configured.](mapping/customizing_your_gateway.md#Controlling-path-parameter-unescaping)
## What is the difference between the gRPC-Gateway and gRPC-web?
### Usage
In the gRPC-Gateway, we generate a reverse-proxy from the proto file annotations. In the front-end, we call directly through REST APIs. We can generate an OpenAPI v2 specification that may further be used to generate the frontend client from using `protoc-gen-openapiv2`.
In gRPC-web, the client code is generated directly from the proto files and can be used in the frontend.
### Performance
The gRPC-Gateway parses JSON to the protobuf binary format before sending it to the gRPC server. It then has to parse the reply back from the protobuf binary format to JSON again The parsing overhead has a negative impact on performance.
In gRPC-web, the message is sent in the protobuf binary format already, so there is no additional parsing cost on the proxy side.
### Maintenance
With the gRPC-Gateway, if your proto file changes, we have to regenerate the gateway reverse proxy code. If you are using the HTTP/JSON interface you probably have to change the front-end too, which means making changes in two places.
In gRPC-web, regenerating the files from the proto file will automatically update the front-end client.
================================================
FILE: docs/docs/mapping/binary_file_uploads.md
================================================
---
layout: default
title: Binary file uploads
nav_order: 2
parent: Mapping
---
# Binary file uploads
If you need to do a binary file upload, e.g. via;
```sh
curl -X POST -F "attachment=@/tmp/somefile.txt" http://localhost:9090/v1/files
```
then your request will contain the binary data directly and there is no way to model this using gRPC.
What you can do instead is to add a custom route directly on the `mux` instance.
## Custom route on a mux instance
Here we'll setup a handler (`handleBinaryFileUpload`) for `POST` requests:
```go
// Create a mux instance
mux := runtime.NewServeMux()
// Attachment upload from http/s handled manually
mux.HandlePath("POST", "/v1/files", handleBinaryFileUpload)
```
And then in your handler you can do something like:
```go
func handleBinaryFileUpload(w http.ResponseWriter, r *http.Request, params map[string]string) {
err := r.ParseForm()
if err != nil {
http.Error(w, fmt.Sprintf("failed to parse form: %s", err.Error()), http.StatusBadRequest)
return
}
f, header, err := r.FormFile("attachment")
if err != nil {
http.Error(w, fmt.Sprintf("failed to get file 'attachment': %s", err.Error()), http.StatusBadRequest)
return
}
defer f.Close()
//
// Now do something with the io.Reader in `f`, i.e. read it into a buffer or stream it to a gRPC client side stream.
// Also `header` will contain the filename, size etc of the original file.
//
}
```
================================================
FILE: docs/docs/mapping/custom_marshalers.md
================================================
---
layout: default
title: Custom marshalers
nav_order: 6
parent: Mapping
---
# Custom marshalers
[`Marshaler`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#Marshaler)
implementations can implement optional additional methods to customize their
behaviour beyond the methods required by the core interface.
## Stream delimiters
By default, a streamed response delimits each response body with a single
newline (`"\n"`). You can change this delimiter by having your marshaler
implement
[`Delimited`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime#Delimited).
For example, to separate each entry with a pipe (`"|"`) instead:
```go
type YourMarshaler struct {
// ...
}
// ...
func (*YourMarshaler) Delimiter() []byte {
return []byte("|")
}
```
## Stream content type
By default, a streamed response emits a `Content-Type` header that is the same
for a unary response, from the `ContentType()` method of the
[`Marshaler`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#Marshaler)
interface.
If you require the server to declare a distinct content type for stream
responses versus unary responses, the marshaler must implement
[`StreamContentType`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime#StreamContentType).
This provides the MIME type when specifically responding to a streaming
response.
For example, by default the
[`JSONPb`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime#JSONPb)
marshaler results in `application/json` for its `Content-Type` response header,
irrespective of unary versus streaming. This can be changed for streaming
endpoints by wrapping the marshaler with a custom marshaler that implements
[`StreamContentType`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime#StreamContentType)
to return the [NDJSON](https://github.com/ndjson/ndjson-spec) MIME type for
streaming response endpoints:
```go
type CustomJSONPb struct {
runtime.JSONPb
}
func (*CustomJSONPb) Delimiter() []byte {
// Strictly speaking this is already the default delimiter for JSONPb, but
// providing it here for completeness with an NDJSON marshaler all in one
// place.
return []byte("\n")
}
func (*CustomJSONPb) StreamContentType(interface{}) string {
return "application/x-ndjson"
}
```
================================================
FILE: docs/docs/mapping/customizing_openapi_output.md
================================================
---
layout: default
title: Customizing OpenAPI Output
nav_order: 4
parent: Mapping
---
{% raw %}
# Customizing OpenAPI Output
## In proto comments
You can provide comments directly in your Protocol Buffer definitions and they will be translated into comments in the generated OpenAPI definitions:
```protobuf
message MyMessage {
// This comment will end up directly in your Open API definition
string uuid = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: "The UUID field."}];
}
```
You can disable this behavior and exclude all protobuf comments from OpenAPI output via the `ignore_comments` option.
## Using proto options
You can define options on your Protocol Buffer services, operations, messages, enums and field definitions to customize your Open API output. For instance, to customize the [OpenAPI Schema Object](https://swagger.io/specification/v2/#schemaObject) for messages and fields:
```protobuf
import "protoc-gen-openapiv2/options/annotations.proto";
message ABitOfEverything {
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
json_schema: {
title: "A bit of everything"
description: "Intentionally complicated message type to cover many features of Protobuf."
required: ["uuid", "int64_value", "double_value"]
}
external_docs: {
url: "https://github.com/grpc-ecosystem/grpc-gateway";
description: "Find out more about ABitOfEverything";
}
example: "{\"uuid\": \"0cf361e1-4b44-483d-a159-54dabdf7e814\"}"
extensions: {
key: "x-irreversible";
value {
bool_value: true;
}
}
};
string uuid = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: "The UUID field."}];
}
```
Enums can be customized like messages:
```protobuf
// NumericEnum is one or zero.
enum NumericEnum {
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_enum) = {
description: "NumericEnum is one or zero."
title: "NumericEnum"
extensions: {
key: "x-a-bit-of-everything-foo"
value {
string_value: "bar"
}
}
external_docs: {
url: "https://github.com/grpc-ecosystem/grpc-gateway"
description: "Find out more about ABitOfEverything"
}
example: "\"ZERO\""
};
// ZERO means 0
ZERO = 0;
// ONE means 1
ONE = 1;
}
```
Operations can also be customized:
```protobuf
service ABitOfEverythingService {
rpc Delete(grpc.gateway.examples.internal.proto.sub2.IdMessage) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1/example/a_bit_of_everything/{uuid}"
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
security: {
security_requirement: {
key: "ApiKeyAuth";
value: {}
}
security_requirement: {
key: "OAuth2";
value: {
scope: "read";
scope: "write";
}
}
}
extensions: {
key: "x-irreversible";
value {
bool_value: true;
}
}
};
}
}
```
[Swagger Extensions](https://swagger.io/docs/specification/2-0/swagger-extensions/) can be added as key-value pairs to the options. Keys must begin with `x-` and values can be of any type listed [here](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#value). For example:
```
extensions: {
key: "x-amazon-apigateway-authorizer";
value {
struct_value {
fields {
key: "type";
value {
string_value: "token";
}
}
fields {
key: "authorizerResultTtlInSeconds";
value {
number_value: 60;
}
}
}
}
}
```
Please see this [a_bit_of_everything.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of the options being used.
## Using google.api.field_behavior
Google provides a [field option](https://github.com/googleapis/googleapis/blob/master/google/api/field_behavior.proto) for defining the behavior of fields that is also supported:
```protobuf
import "google/api/field_behavior.proto";
message MyMessage {
string a_required_field = 1 [(google.api.field_behavior) = REQUIRED];
}
```
The following options are used in the Open API output:
- `REQUIRED` - marks a field as required
- `OUTPUT_ONLY` - marks a field as readonly
Google defines a couple of other options - `OPTIONAL`, `IMMUTABLE`, `INPUT_ONLY` -
that are not currently used. `OPTIONAL` support is currently under discussion
in [this issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/669).
For `IMMUTABLE` and `INPUT_ONLY` fields, there is an [open issue](https://github.com/OAI/OpenAPI-Specification/issues/1497) in the Open API specification for adding functionality for write-once or immutable fields to the spec.
## Using go templates in proto file comments
Use [Go templates](https://golang.org/pkg/text/template/) in your proto file comments to allow more advanced documentation such as:
- Documentation about fields in the proto objects.
- Import the content of external files (such as
[Markdown](https://en.wikipedia.org/wiki/Markdown)).
### How to use it
By default this function is turned off, so if you want to use it you have to add the `use_go_templates` option:
```sh
--openapiv2_out . --openapiv2_opt use_go_templates=true
```
or:
```sh
--openapiv2_out=use_go_templates=true:.
```
#### Example script
Example of a bash script with the `use_go_templates` flag set to true:
```sh
$ protoc -I. \
--go_out . --go-grpc_out . \
--grpc-gateway_out . \
--openapiv2_out . \
--openapiv2_opt use_go_templates=true \
path/to/my/proto/v1/myproto.proto
```
#### Example proto file
Example of a proto file with Go templates. This proto file imports documentation from another file, `tables.md`:
```protobuf
service LoginService {
// Login
//
// {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service.
// It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}".
//
// {{import "tables.md"}}
rpc Login (LoginRequest) returns (LoginReply) {
option (google.api.http) = {
post: "/v1/example/login"
body: "*"
};
}
}
message LoginRequest {
// The entered username
string username = 1;
// The entered password
string password = 2;
}
message LoginReply {
// Whether you have access or not
bool access = 1;
}
```
The content of `tables.md`:
```markdown
## {{.RequestType.Name}}
| Field ID | Name | Type | Description |
| ----------- | --------- | --------------------------------------------------------- | ---------------------------- | {{range .RequestType.Fields}}
| {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}
## {{.ResponseType.Name}}
| Field ID | Name | Type | Description |
| ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}}
| {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}}
```
### OpenAPI output
#### SwaggerUI
This is how the OpenAPI file would be rendered in [Swagger UI](https://swagger.io/tools/swagger-ui/).

#### Postman
This is how the OpenAPI file would be rendered in [Postman](https://www.getpostman.com/).

For a more detailed example of a proto file that has Go, templates enabled, [see the examples](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/examples/internal/proto/examplepb/use_go_template.proto).
### Using custom values
Custom values can be specified in the [Go templates](https://golang.org/pkg/text/template/) that generate your proto file comments.
A use case might be to interpolate different external documentation URLs when rendering documentation for different environments.
#### How to use it
The `use_go_templates` option has to be enabled as a prerequisite.
Provide customized values in the format of `go_template_args=my_key=my_value`. `{{arg "my_key"}}` will be replaced with `my_value` in the Go template.
Specify the `go_template_args` option multiple times if needed.
```sh
--openapiv2_out . --openapiv2_opt use_go_templates=true --openapiv2_opt go_template_args=my_key1=my_value1 --openapiv2_opt go_template_args=my_key2=my_value2
...
```
#### Example script
Example of a bash script with the `use_go_templates` flag set to true and custom template values set:
```sh
$ protoc -I. \
--go_out . --go-grpc_out . \
--grpc-gateway_out . \
--openapiv2_out . \
--openapiv2_opt use_go_templates=true \
--openapiv2_opt go_template_args=environment=test1 \
--openapiv2_opt go_template_args=environment_label=Test1 \
path/to/my/proto/v1/myproto.proto
```
#### Example proto file
Example of a proto file with Go templates and custom values:
```protobuf
service LoginService {
// Login (Environment: {{arg "environment_label"}})
//
// {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service.
// It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}".
// This only works in the {{arg "environment"}} domain.
//
rpc Login (LoginRequest) returns (LoginReply) {
option (google.api.http) = {
post: "/v1/example/login"
body: "*"
};
}
}
```
## Other plugin options
A comprehensive list of OpenAPI plugin options can be found [here](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/protoc-gen-openapiv2/main.go). Options can be passed via `protoc` CLI:
```sh
--openapiv2_out . --openapiv2_opt bar=baz,color=red
```
Or, with `buf` in `buf.gen.yaml`:
```yaml
- name: openapiv2
out: foo
opt: bar=baz,color=red
```
### Merging output
If your protobuf definitions are spread across multiple files, the OpenAPI plugin will create a file for each `.proto` input. This may make sense for Go bindings, since they still share a package space, but fragmenting OpenAPI specifications across multiple files changes the schema itself.
To merge disparate `.proto` inputs into a single OpenAPI file, use the `allow_merge` and `merge_file_name` options.
`opt: allow_merge=true,merge_file_name=foo` will result in a single `foo.swagger.json`. Note that you may need to set
the [generation strategy](https://docs.buf.build/configuration/v1/buf-gen-yaml/#strategy) to `all` when merging many files:
```yaml
- name: openapiv2
out: foo
strategy: all
opt: allow_merge=true,merge_file_name=foo
```
### Enums as integers
To generate enums as integers instead of strings, use `enums_as_ints`.
`opt: enums_as_ints=true` will result in:
```json
{
"name": "enumValue",
"description": " - Example enums",
"in": "query",
"required": false,
"type": "int",
"enum": [
0,
1
],
"default": 0
},
```
### Omitting the default value of enums
If you define enum types with non default value such as declaring 0 value with UNKNOWN and want to omit the default value from generated swagger file, use `omit_enum_default_value`.
This option also applies if enums_as_ints option is enalbled to generate enums as integer.
`opt: omit_enum_default_value=true` will result in:
Input Example:
```
enum enumValue {
UNKNOWN = 0;
FOO = 1;
}
```
Output json:
```json
{
"name": "enumValue",
"description": " - Example enums",
"in": "query",
"required": false,
"type": "string",
"enum": [
"FOO"
]
},
```
### Hiding fields, methods, services and enum values
If you require internal or unreleased fields and APIs to be hidden from your API documentation, [`google.api.VisibilityRule`](https://github.com/googleapis/googleapis/blob/9916192ab15e3507e41ba2c5165182fec06120d0/google/api/visibility.proto#L89) annotations can be added to customize where they are generated. Combined with the option `visibility_restriction_selectors`, overlapping rules will appear in the OpenAPI output.
`visibility_restriction_selectors` can be declared multiple times as an option to include multiple visibility restrictions in the output.
e.g. if you are using `buf`:
```yaml
version: v1
plugins:
- name: openapiv2
out: .
opt:
- visibility_restriction_selectors=PREVIEW
- visibility_restriction_selectors=INTERNAL
```
or with `protoc`
```sh
protoc --openapiv2_out=. --openapiv2_opt=visibility_restriction_selectors=PREVIEW --openapiv2_opt=visibility_restriction_selectors=INTERNAL ./path/to/file.proto
```
Elements without `google.api.VisibilityRule` annotations will appear as usual in the generated output.
These restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want. In this example we use `INTERNAL` and `PREVIEW`, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish.
Note: Annotations are only supported on Services, Methods, Fields and Enum Values.
`opt: visibility_restriction_selectors=PREVIEW` will result in:
Input Example:
```protobuf
service Echo {
rpc EchoInternal(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) {
option (google.api.method_visibility).restriction = "INTERNAL";
option (google.api.http) = {
get: "/v1/example/echo_internal"
};
}
rpc EchoInternalAndPreview(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) {
option (google.api.method_visibility).restriction = "INTERNAL,PREVIEW";
option (google.api.http) = {
get: "/v1/example/echo_internal_and_preview"
};
}
}
message VisibilityRuleSimpleMessage {
enum VisibilityEnum {
UNSPECIFIED = 0;
VISIBLE = 1;
INTERNAL = 2 [(google.api.value_visibility).restriction = "INTERNAL"];
PREVIEW = 3 [(google.api.value_visibility).restriction = "INTERNAL,PREVIEW"];
}
string internal_field = 1 [(google.api.field_visibility).restriction = "INTERNAL"];
string preview_field = 2 [(google.api.field_visibility).restriction = "INTERNAL,PREVIEW"];
VisibilityEnum an_enum = 3;
}
```
Output json:
```json
{
"paths": {
"/v1/example/echo_internal_and_preview": {
"get": {
"summary": "EchoInternalAndPreview is a internal and preview API that should be visible in the OpenAPI spec.",
"operationId": "VisibilityRuleEchoService_EchoInternalAndPreview",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "previewField",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "anEnum",
"in": "query",
"required": false,
"type": "string",
"enum": [
"UNSPECIFIED",
"VISIBLE",
"PREVIEW"
],
"default": "UNSPECIFIED"
}
],
"tags": [
"VisibilityRuleEchoService"
]
}
}
}
}
```
For a more in depth example see [visibility_rule_echo_service.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/examples/internal/proto/examplepb/visibility_rule_echo_service.proto) and the following output files for different values of `visibility_restriction_selectors`:
- [`visibility_restriction_selectors=PREVIEW`](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/examples/internal/proto/examplepb/visibility_rule_preview_echo_service.swagger.json)
- [`visibility_restriction_selectors=INTERNAL`](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/examples/internal/proto/examplepb/visibility_rule_internal_echo_service.swagger.json)
- [`visibility_restriction_selectors=INTERNAL,visibility_restriction_selectors=PREVIEW`](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json)
- [Not set](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/examples/internal/proto/examplepb/visibility_rule_none_echo_service.swagger.json)
### Path parameters
When defining HTTP bindings with path parameters that contain multiple path segments, as suggested by the [Google AIPs](https://google.aip.dev/), the path parameter names are numbered to avoid generating duplicate paths in the OpenAPI file.
For example, consider:
```protobuf
service LibraryService {
rpc GetShelf(GetShelfRequest) returns (Shelf) {
option (google.api.http) = {
get: "/v1/{name=shelves/*}"
};
}
rpc GetBook(GetBookRequest) returns (Book) {
option (google.api.http) = {
get: "/v1/{name=shelves/*/books/*}"
};
}
}
message GetShelfRequest {
string name = 1;
}
message GetBookRequest {
string name = 1;
}
```
This will generate the following paths:
- `/v1/{name}`
- `/v1/{name_1}`
To override the path parameter names, annotate the field used as path parameter:
```protobuf
message GetShelfRequest {
string name = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {field_configuration: {path_param_name: "shelfName"}}];
}
message GetBookRequest {
string name = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {field_configuration: {path_param_name: "bookName"}}];
}
```
This will instead generate the following paths:
- `/v1/{shelfName}`
- `/v1/{bookName}`
Note that path parameters in OpenAPI does not support values with `/`, as discussed in
[Support for path parameters which can contain slashes #892](https://github.com/OAI/OpenAPI-Specification/issues/892),
so tools as Swagger UI will URL encode any `/` provided as parameter value. A possible workaround for this is to write
a custom post processor for your OAS file to replace any path parameter with `/` into multiple parameters.
#### Expand path parameters containing sub-path segments
Alternative to the above, you can enable the `expand_slashed_path_patterns` compiler option to expand path parameters containing sub-path segments into the URI.
For example, consider:
```protobuf
rpc GetBook(GetBookRequest) returns (Book) {
option (google.api.http) = {
get: "/v1/{name=publishers/*/books/*}"
};
}
```
Where the `GetBook` has a path parameter `name` with a pattern `publishers/*/books/*`. When you enable the `expand_slashed_path_patterns=true` option the path pattern is expanded into the URI and each wildcard in the pattern is transformed into new path parameter. The generated schema for previous protobuf is:
```JSON
{
"/v1/publishers/{publisher}/books/{book}": {
"get": {
"parameters": [
{
"name": "publisher",
"in": "path",
"required": true,
"type": "string",
},
{
"name": "book",
"in": "path",
"required": true,
"type": "string",
}
]
}
}
}
```
The URI is now pretty descriptive and there are two path parameters `publisher` and `book` instead of one `name`. The name of the new parameters is derived from the path segment before the wildcard in the pattern.
Caveats:
- the fact that the original `name` parameter is missing might complicate the usage of the API if you intend to pass in the `name` parameters from the resources,
- when the `expand_slashed_path_patterns` compiler flag is enabled, the [`path_param_name`](#path-parameters) field annotation is ignored.
### Output format
By default the output format is JSON, but it is possible to configure it using the `output_format` option. Allowed values are: `json`, `yaml`. The output format will also change the extension of the output files.
For example, if using `buf`:
```yaml
- name: openapiv2
out: pkg
opt: output_format=yaml
```
Input example:
```protobuf
syntax = "proto3";
package helloproto.v1;
option go_package = "helloproto/v1;helloproto";
import "google/api/annotations.proto";
service EchoService {
rpc Hello(HelloReq) returns (HelloResp) {
option (google.api.http) = {
get: "/api/hello"
};
}
}
message HelloReq {
string name = 1;
}
message HelloResp {
string message = 1;
}
```
Output:
```yaml
swagger: "2.0"
info:
title: helloproto/v1/example.proto
version: version not set
tags:
- name: EchoService
consumes:
- application/json
produces:
- application/json
paths:
/api/hello:
get:
operationId: EchoService_Hello
responses:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v1HelloResp'
default:
description: An unexpected error response.
schema:
$ref: '#/definitions/rpcStatus'
parameters:
- name: name
in: query
required: false
type: string
tags:
- EchoService
definitions:
protobufAny:
type: object
properties:
'@type':
type: string
additionalProperties: {}
rpcStatus:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
details:
type: array
items:
$ref: '#/definitions/protobufAny'
v1HelloResp:
type: object
properties:
message:
type: string
```
### Disable service tag generation
By default service tags are generated for backend services, but it is possible to disable it using the `disable_service_tags` option. Allowed values are: `true`, `false`.
For example, if you are using `buf`:
```yaml
version: v1
plugins:
- name: openapiv2
out: .
opt:
- disable_service_tags=true
```
or with `protoc`
```sh
protoc --openapiv2_out=. --openapiv2_opt=disable_service_tags=true ./path/to/file.proto
```
Input example:
```protobuf
syntax = "proto3";
package helloproto.v1;
option go_package = "helloproto/v1;helloproto";
import "google/api/annotations.proto";
service EchoService {
rpc Hello(HelloReq) returns (HelloResp) {
option (google.api.http) = {
get: "/api/hello"
};
}
}
message HelloReq {
string name = 1;
}
message HelloResp {
string message = 1;
}
```
Output (tags object are not generated):
```yaml
swagger: "2.0"
info:
title: helloproto/v1/example.proto
version: version not set
consumes:
- application/json
produces:
- application/json
paths:
/api/hello:
get:
operationId: EchoService_Hello
```
### Disable default responses
By default a 200 OK response is rendered for each service operation. But it is possible to disable this and explicitly define your service's responses, using the `disable_default_responses` option. Allowed values are: `true`, `false`.
**Note**: This does not alter the behavior of the gateway itself and should be coupled with a `ForwardResponseWriter` when altering status codes, see [Controlling HTTP Response Codes](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/customizing_your_gateway/#controlling-http-response-status-codes).
For example, if you are using `buf`:
```yaml
version: v1
plugins:
- name: openapiv2
out: .
opt:
- disable_default_responses=true
```
or with `protoc`
```sh
protoc --openapiv2_out=. --openapiv2_opt=disable_default_responses=true ./path/to/file.proto
```
Input example:
```protobuf
syntax = "proto3";
package helloproto.v1;
import "google/api/annotations.proto";
import "protoc-gen-openapiv2/options/annotations.proto";
option go_package = "helloproto/v1;helloproto";
service EchoService {
rpc Hello(HelloReq) returns (HelloResp) {
option (google.api.http) = {get: "/api/hello"};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
responses: {
key: "201",
value: {
description: "Created";
schema: {
json_schema: {ref: ".helloproto.v1.HelloResp"}
}
}
};
};
}
}
message HelloReq {
string name = 1;
}
message HelloResp {
string message = 1;
}
```
Output (default response not generated):
```yaml
swagger: "2.0"
info:
title: helloproto/v1/hello.proto
version: version not set
consumes:
- application/json
produces:
- application/json
paths:
/api/hello:
get:
operationId: EchoService_Hello
responses:
"201":
description: Created
schema:
$ref: "#/definitions/v1HelloResp"
parameters:
- name: name
in: query
required: false
type: string
definitions:
v1HelloResp:
type: object
properties:
message:
type: string
```
### Omit array item type when $ref is a sibling
By default, when generating OpenAPI schemas for array items that reference other definitions, both `type: object` and `$ref` properties are included. However, some strict OpenAPI validators enforce the `no-$ref-siblings` rule, which prohibits having `$ref` alongside other properties at the same level. To comply with this strict validation, you can use the `omit_array_item_type_when_ref_sibling` option. When enabled, this option omits the `type: object` property from array items when a `$ref` is present, since `$ref` already implies the type. Allowed values are: `true`, `false`.
**Note**: This option only affects the generated OpenAPI specification and does not alter the behavior of the gateway itself.
For example, if you are using `buf`:
```yaml
version: v1
plugins:
- name: openapiv2
out: .
opt:
- omit_array_item_type_when_ref_sibling=true
```
or with `protoc`
```sh
protoc --openapiv2_out=. --openapiv2_opt=omit_array_item_type_when_ref_sibling=true ./path/to/file.proto
```
Input example:
```protobuf
syntax = "proto3";
package example.v1;
import "google/api/annotations.proto";
option go_package = "example/v1;example";
service ExampleService {
rpc GetItems(GetItemsRequest) returns (GetItemsResponse) {
option (google.api.http) = {get: "/api/items"};
}
}
message GetItemsRequest {}
message GetItemsResponse {
repeated Item items = 1;
}
message Item {
string id = 1;
string name = 2;
}
```
Output without the option (default behavior):
```yaml
definitions:
v1GetItemsResponse:
type: object
properties:
items:
type: array
items:
type: object # This can violate strict no-$ref-siblings rule
$ref: "#/definitions/v1Item"
v1Item:
type: object
properties:
id:
type: string
name:
type: string
```
Output with `omit_array_item_type_when_ref_sibling=true`:
```yaml
definitions:
v1GetItemsResponse:
type: object
properties:
items:
type: array
items:
$ref: "#/definitions/v1Item" # type: object is omitted
v1Item:
type: object
properties:
id:
type: string
name:
type: string
```
### Custom HTTP Header Request Parameters
By default the parameters for each operation are generated from the protocol buffer definition however you can extend the parameters to include extra HTTP headers if required.
**NOTE**: These annotations do not alter the behaviour of the gateway and must be coupled with custom header parsing behaviour in the application. Also be aware that adding header parameters can alter the forwards and backwards compatibility of the schema. You must also set a type for your header which can be one of `STRING`, `INTEGER`, `NUMBER` or `BOOLEAN`.
```protobuf
syntax = "proto3";
package helloproto.v1;
import "google/api/annotations.proto";
import "protoc-gen-openapiv2/options/annotations.proto";
option go_package = "helloproto/v1;helloproto";
service EchoService {
rpc Hello(HelloReq) returns (HelloResp) {
option (google.api.http) = {get: "/api/hello"};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
parameters: {
headers: {
name: "X-Foo";
description: "Foo Header";
type: STRING,
required: true;
};
headers: {
name: "X-Bar";
description: "Bar Header";
type: NUMBER,
};
};
};
}
}
message HelloReq {
string name = 1;
}
message HelloResp {
string message = 1;
}
```
Output:
```yaml
swagger: "2.0"
info:
title: helloproto/v1/hello.proto
version: version not set
consumes:
- application/json
produces:
- application/json
paths:
/api/hello:
get:
operationId: Hello
responses:
"200":
description: A successful response.
schema:
$ref: "#/definitions/helloproto.v1.HelloResp"
parameters:
- name: name
in: query
required: false
type: string
- name: X-Foo
description: Foo Header
in: header
required: true
type: string
- name: X-Bar
description: Bar Header
in: header
required: false
type: number
definitions:
helloproto.v1.HelloResp:
type: object
properties:
message:
type: string
```
### Ignore comments
If you want to exclude all protobuf comments (such as `// buf:lint:ignore`) from OpenAPI output, use the `ignore_comments` option. Allowed values are: `true`, `false`.
**Note**: `ignore_comments` and `use_go_templates` are mutually exclusive and cannot be enabled at the same time.
If you are using `buf`:
```yaml
version: v1
plugins:
- name: openapiv2
out: .
opt:
- ignore_comments=true
```
or with `protoc`:
```sh
protoc --openapiv2_out=. --openapiv2_opt=ignore_comments=true ./path/to/file.proto
```
### Removing internal comments
If you want to remove internal comments from the from OpenAPI output (such as `TODO` and `FIXME` directives) you can use the `remove_internal_comments` option.
If set to `true`, this will remove all comment text located between `(--` and `--)` as per [AIP 192: Internal comments](https://google.aip.dev/192#internal-comments).
### Preserve RPC Path Order
By default, generated Swagger files emit paths found in proto files in alphabetical order. If you would like to
preserve the order of emitted paths to mirror the path order found in proto files, you can use the `preserve_rpc_order` option. If set to `true`, this option will ensure path ordering is preserved for Swagger files with both json and yaml formats.
This option will also ensure path ordering is preserved in the following scenarios:
1. When using additional bindings, paths will preserve their ordering within an RPC.
2. When using multiple services, paths will preserve their ordering between RPCs in the whole protobuf file.
3. When merging protobuf files, paths will preserve their ordering depending on the order of files specified on the command line.
`preserve_rpc_order` can be passed via the `protoc` CLI:
```sh
protoc --openapiv2_out=. --openapiv2_opt=preserve_rpc_order=true ./path/to/file.proto
```
Or, with `buf` in `buf.gen.yaml`:
```yaml
version: v1
plugins:
- name: openapiv2
out: .
opt:
- preserve_rpc_order=true
```
### Enable RPC deprecation
With `enable_rpc_deprecation` option you can deprecate openapi method using standard method's option. Allowed values are: `true`, `false`.
For example, if you are using `buf`:
```yaml
version: v1
plugins:
- name: openapiv2
out: .
opt:
- enable_rpc_deprecation=true
```
or with `protoc`
```sh
protoc --openapiv2_out=. --openapiv2_opt=enable_rpc_deprecation=true ./path/to/file.proto
```
Input example:
```protobuf
syntax = "proto3";
package helloproto.v1;
import "google/api/annotations.proto";
option go_package = "helloproto/v1;helloproto";
service EchoService {
rpc Hello(HelloReq) returns (HelloResp) {
option deprecated = true;
option (google.api.http) = {get: "/api/hello"};
}
}
message HelloReq {
string name = 1;
}
message HelloResp {
string message = 1;
}
```
Output:
```yaml
swagger: "2.0"
info:
title: helloproto/v1/example.proto
version: version not set
tags:
- name: EchoService
consumes:
- application/json
produces:
- application/json
paths:
/api/hello:
get:
operationId: EchoService_Hello
responses:
"200":
description: A successful response.
schema:
$ref: '#/definitions/v1HelloResp'
default:
description: An unexpected error response.
schema:
$ref: '#/definitions/rpcStatus'
parameters:
- name: name
in: query
required: false
type: string
tags:
- EchoService
deprecated: true
definitions:
protobufAny:
type: object
properties:
'@type':
type: string
additionalProperties: {}
rpcStatus:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
details:
type: array
items:
type: object
$ref: '#/definitions/protobufAny'
v1HelloResp:
type: object
properties:
message:
type: string
```
### Deprecating parameters
With the `enable_field_deprecation` option, OpenAPI parameters will be marked as deprecated based on the protobuf `deprecated` field option. Allowed values are: `true`, `false`.
For example, if you are using `buf`:
```yaml
version: v1
plugins:
- name: openapiv2
out: .
opt:
- enable_field_deprecation=true
```
or with `protoc`
```sh
protoc --openapiv2_out=. --openapiv2_opt=enable_field_deprecation=true ./path/to/file.proto
```
Input example:
```protobuf
message SearchRequest {
string legacy_filter = 1 [deprecated = true];
string query = 2;
}
```
Output (excerpt):
```yaml
paths:
/v1/search:
get:
parameters:
- name: legacy_filter
in: query
required: false
type: string
deprecated: true
- name: query
in: query
required: false
type: string
```
If you prefer to leave the protobuf definition active, you can use the `field_configuration.deprecated` annotation on the `openapiv2_field` option instead:
```protobuf
message SearchRequest {
string legacy_filter = 1 [
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
description: "Legacy filter syntax. Prefer the new 'query' field."
field_configuration: { deprecated: true }
}
];
string query = 2;
}
```
This keeps the protobuf field untouched but still emits a deprecated parameter in the generated spec:
```yaml
paths:
/v1/search:
get:
parameters:
- name: legacy_filter
in: query
required: false
type: string
description: Legacy filter syntax. Prefer the new 'query' field.
deprecated: true
- name: query
in: query
required: false
type: string
```
If you set both the protobuf `deprecated = true` option and `field_configuration.deprecated`, the OpenAPI parameter is marked as deprecated regardless of the `enable_field_deprecation` option.
{% endraw %}
================================================
FILE: docs/docs/mapping/customizing_your_gateway.md
================================================
---
layout: default
title: Customizing your gateway
nav_order: 5
parent: Mapping
---
# Customizing your gateway
## Message serialization
### Custom serializer
You might want to serialize request/response messages in MessagePack instead of JSON, for example:
1. Write a custom implementation of
[`Marshaler`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#Marshaler).
See [Custom marshalers](custom_marshalers.md) for some additional
customization options.
2. Register your marshaler with [`WithMarshalerOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithMarshalerOption).
e.g.
```go
var m your.MsgPackMarshaler
mux := runtime.NewServeMux(
runtime.WithMarshalerOption("application/x-msgpack", m),
)
```
You can see [the default implementation for JSON](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/runtime/marshal_jsonpb.go) for reference.
### Using proto names in JSON
The protocol buffer compiler generates camelCase JSON tags that are used by default.
If you want to use the exact case used in the proto files, set `UseProtoNames: true`:
```go
mux := runtime.NewServeMux(
runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{
MarshalOptions: protojson.MarshalOptions{
UseProtoNames: true,
},
UnmarshalOptions: protojson.UnmarshalOptions{
DiscardUnknown: true,
},
}),
)
```
### Pretty-print JSON responses when queried with ?pretty
You can have Elasticsearch-style `?pretty` support in your gateway's endpoints as follows:
1. Wrap the ServeMux using a stdlib [`http.HandlerFunc`](https://golang.org/pkg/net/http/#HandlerFunc) that translates the provided query parameter into a custom `Accept` header.
2. Register a pretty-printing marshaler for that MIME code.
For example:
```go
mux := runtime.NewServeMux(
runtime.WithMarshalerOption("application/json+pretty", &runtime.JSONPb{
MarshalOptions: protojson.MarshalOptions{
Indent: " ",
Multiline: true, // Optional, implied by presence of "Indent".
},
UnmarshalOptions: protojson.UnmarshalOptions{
DiscardUnknown: true,
},
}),
)
prettier := func(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// checking Values as map[string][]string also catches ?pretty and ?pretty=
// r.URL.Query().Get("pretty") would not.
if _, ok := r.URL.Query()["pretty"]; ok {
r.Header.Set("Accept", "application/json+pretty")
}
h.ServeHTTP(w, r)
})
}
http.ListenAndServe(":8080", prettier(mux))
```
Now, either when passing the header `Accept: application/json+pretty` or appending `?pretty` to your HTTP endpoints, the response will be pretty-printed.
Note that this will conflict with any methods having input messages with fields named `pretty`; also, this example code does not remove the query parameter `pretty` from further processing.
## Customize unmarshaling per Content-Type
Having different unmarshaling options per Content-Type is as easy as configuring a custom marshaler:
```go
mux := runtime.NewServeMux(
runtime.WithMarshalerOption("application/json+strict", &runtime.JSONPb{
UnmarshalOptions: &protojson.UnmarshalOptions{
DiscardUnknown: false, // explicit "false", &protojson.UnmarshalOptions{} would have the same effect
},
}),
)
```
Note: The incoming `Authorization` HTTP header can not be removed or overwritten. It will always be forwarded in the gRPC metadata under the `authorization` key. However, values can be appended.
## Mapping from HTTP request headers to gRPC client metadata
You might not like [the default mapping rule](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#DefaultHeaderMatcher) and might want to pass through all the HTTP headers, for example:
1. Write a [`HeaderMatcherFunc`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#HeaderMatcherFunc).
2. Register the function with [`WithIncomingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithIncomingHeaderMatcher)
e.g.
```go
func CustomMatcher(key string) (string, bool) {
switch key {
case "X-Custom-Header1":
return key, true
case "X-Custom-Header2":
return "custom-header2", true
default:
return key, false
}
}
mux := runtime.NewServeMux(
runtime.WithIncomingHeaderMatcher(CustomMatcher),
)
```
To keep the [default mapping rule](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#DefaultHeaderMatcher) alongside with your own rules write:
```go
func CustomMatcher(key string) (string, bool) {
switch key {
case "X-User-Id":
return key, true
default:
return runtime.DefaultHeaderMatcher(key)
}
}
```
It will work with both:
```sh
$ curl --header "x-user-id: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ...
```
and
```sh
$ curl --header "X-USER-ID: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ...
```
To access this header on gRPC server side use:
```go
userID := ""
if md, ok := metadata.FromIncomingContext(ctx); ok {
if uID, ok := md["x-user-id"]; ok {
userID = strings.Join(uID, ",")
}
}
```
## Mapping from gRPC server metadata to HTTP response headers
Use [`WithOutgoingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithOutgoingHeaderMatcher). See [gRPC metadata docs](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) for more info on sending / receiving gRPC metadata, for example:
```go
if appendCustomHeader {
grpc.SendHeader(ctx, metadata.New(map[string]string{
"x-custom-header1": "value",
}))
}
```
## Mutate response messages or set response headers
### Set HTTP headers
You might want to return a subset of response fields as HTTP response headers; You might want to simply set an application-specific token in a header. Or you might want to mutate the response messages to be returned.
1. Write a filter function.
```go
func myFilter(ctx context.Context, w http.ResponseWriter, resp proto.Message) error {
t, ok := resp.(*externalpb.Tokenizer)
if ok {
w.Header().Set("X-My-Tracking-Token", t.Token)
t.Token = ""
}
return nil
}
```
2. Register the filter with [`WithForwardResponseOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithForwardResponseOption)
e.g.
```go
mux := runtime.NewServeMux(
runtime.WithForwardResponseOption(myFilter),
)
```
### Controlling HTTP response status codes
To have the most control over the HTTP response status codes, you can use custom metadata.
While handling the rpc, set the intended status code:
```go
_ = grpc.SetHeader(ctx, metadata.Pairs("x-http-code", "401"))
```
Now, before sending the HTTP response, we need to check for this metadata pair and explicitly set the status code for the response if found.
To do so, create a function and hook it into the gRPC-Gateway as a Forward Response Option.
The function looks like this:
```go
func httpResponseModifier(ctx context.Context, w http.ResponseWriter, p proto.Message) error {
md, ok := runtime.ServerMetadataFromContext(ctx)
if !ok {
return nil
}
// set http status code
if vals := md.HeaderMD.Get("x-http-code"); len(vals) > 0 {
code, err := strconv.Atoi(vals[0])
if err != nil {
return err
}
// delete the headers to not expose any grpc-metadata in http response
delete(md.HeaderMD, "x-http-code")
delete(w.Header(), "Grpc-Metadata-X-Http-Code")
w.WriteHeader(code)
}
return nil
}
```
And it gets hooked into the gRPC-Gateway with:
```go
gwMux := runtime.NewServeMux(
runtime.WithForwardResponseOption(httpResponseModifier),
)
```
Additional responses can be added to the Protocol Buffer definitions to match the new status codes:
```protobuf
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {
option (google.api.http) = {
post: "/v1/example/echo"
body: "*"
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
responses: {
key: "201"
value: {
description: "A successful response."
schema: {
json_schema: {
ref: ".mypackage.HelloReply"
}
}
}
}
};
}
rpc SayGoodbye (GoodbyeRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1/example/echo/{id}"
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
responses: {
key: "204"
value: {
description: "A successful response."
schema: {}
}
}
};
}
}
```
### Fully Overriding Custom HTTP Responses
To fully override custom HTTP responses, you can use both a Forward Response Option and a Custom Marshaler.
For example with proto response message as:
```proto
message CreateUserResponse {
string name = 1;
}
```
The default HTTP response:
```json5
HTTP 200 OK
Content-Type: application/json
{"name":"John Doe"}
```
But you want to return a `201 Created` status code along with a custom response structure:
```json5
HTTP 201 Created
Content-Type: application/json
{"success":true,"data":{"name":"John Doe"}}
```
First, set up the gRPC-Gateway with the custom options:
```go
mux := runtime.NewServeMux(
runtime.WithForwardResponseOption(setStatus),
runtime.WithForwardResponseRewriter(responseEnvelope),
)
```
Define the `setStatus` function to handle specific response types:
```go
func setStatus(ctx context.Context, w http.ResponseWriter, m protoreflect.ProtoMessage) error {
switch v := m.(type) {
case *pb.CreateUserResponse:
w.WriteHeader(http.StatusCreated)
}
// keep default behavior
return nil
}
```
Define the `responseEnvelope` function to rewrite the response to a different type/shape:
```go
func responseEnvelope(_ context.Context, response proto.Message) (interface{}, error) {
switch v := response.(type) {
case *pb.CreateUserResponse:
// wrap the response in a custom structure
return map[string]any{
"success": true,
"data": response,
}, nil
}
return response, nil
}
```
In this setup:
- The `setStatus` function intercepts the response and uses its type to send `201 Created` only when it sees `*pb.CreateUserResponse`.
- The `responseEnvelope` function ensures that specific types of responses are wrapped in a custom structure before being sent to the client.
❗ **NOTE:** Using `WithForwardResponseRewriter` is partially incompatible with OpenAPI annotations. Because response
rewriting happens at runtime, it is not possible to represent that in `protoc-gen-openapiv2` output.
## Error handler
To override error handling for a `*runtime.ServeMux`, use the
`runtime.WithErrorHandler` option. This will configure all unary error
responses to pass through this error handler.
## Stream Error Handler
The error handler described in the previous section applies only to RPC methods that have a unary response.
When the method has a streaming response, gRPC-Gateway handles that by emitting a newline-separated stream of "chunks". Each chunk is an envelope that can contain either a response message or an error. Only the last chunk will include an error, and only when the RPC handler ends abnormally (i.e. with an error code).
Because of the way the errors are included in the response body, the other error handler signature is insufficient. So for server streams, you must install a _different_ error handler:
```go
mux := runtime.NewServeMux(
runtime.WithStreamErrorHandler(handleStreamError),
)
```
The signature of the handler is much more rigid because we need to know the structure of the error payload to properly encode the "chunk" schema into an OpenAPI spec.
So the function must return a `*runtime.StreamError`. The handler can choose to omit some fields and can filter/transform the original error, such as stripping stack traces from error messages.
Here's an example custom handler:
```go
// handleStreamError overrides default behavior for computing an error
// message for a server stream.
//
// It uses a default "502 Bad Gateway" HTTP code, only emits "safe"
// messages and does not set the details field (so it will
// be omitted from the resulting JSON object that is sent to client).
func handleStreamError(ctx context.Context, err error) *status.Status {
code := codes.Internal
msg := "unexpected error"
if s, ok := status.FromError(err); ok {
code = s.Code()
// default message, based on the gRPC status
msg = s.Message()
// see if error details include "safe" message to send
// to external callers
for _, msg := range s.Details() {
if safe, ok := msg.(*SafeMessage); ok {
msg = safe.Text
break
}
}
}
return status.Errorf(code, msg)
}
```
If no custom handler is provided, the default stream error handler will include any gRPC error attributes (code, message, detail messages), if the error being reported includes them. If the error does not have these attributes, a gRPC code of `Unknown` (2) is reported.
## Controlling path parameter unescaping
<!-- TODO(v3): Remove comments about default behavior -->
By default, gRPC-Gateway unescapes the entire URL path string attempting to route a request. This causes routing errors when the path parameter contains an illegal character such as `/`.
To replicate the behavior described in [google.api.http](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L224), use [runtime.WithUnescapingMode()](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithUnescapingMode) to configure the unescaping behavior, as in the example below:
```go
mux := runtime.NewServeMux(
runtime.WithUnescapingMode(runtime.UnescapingModeAllExceptReserved),
)
```
For multi-segment parameters (e.g. `{id=**}`) [RFC 6570](https://tools.ietf.org/html/rfc6570) Reserved Expansion characters are left escaped and the gRPC API will need to unescape them.
To replicate the default V2 escaping behavior but also allow passing pct-encoded `/` characters, the ServeMux can be configured as in the example below:
```go
mux := runtime.NewServeMux(
runtime.WithUnescapingMode(runtime.UnescapingModeAllCharacters),
)
```
## Routing Error handler
To override the error behavior when `*runtime.ServeMux` was not able to serve the request due to routing issues, use the `runtime.WithRoutingErrorHandler` option.
This will configure all HTTP routing errors to pass through this error handler. The default behavior is to map HTTP error codes to gRPC errors.
HTTP statuses and their mappings to gRPC statuses:
- HTTP `404 Not Found` -> gRPC `5 NOT_FOUND`
- HTTP `405 Method Not Allowed` -> gRPC `12 UNIMPLEMENTED`
- HTTP `400 Bad Request` -> gRPC `3 INVALID_ARGUMENT`
This method is not used outside of the initial routing.
### Customizing Routing Errors
If you want to retain HTTP `405 Method Not Allowed` instead of allowing it to be converted to the equivalent of the gRPC `12 UNIMPLEMENTED`, which is HTTP `501 Not Implemented` you can use the following example:
```go
func handleRoutingError(ctx context.Context, mux *runtime.ServeMux, marshaler runtime.Marshaler, w http.ResponseWriter, r *http.Request, httpStatus int) {
if httpStatus != http.StatusMethodNotAllowed {
runtime.DefaultRoutingErrorHandler(ctx, mux, marshaler, w, r, httpStatus)
return
}
// Use HTTPStatusError to customize the DefaultHTTPErrorHandler status code
err := &runtime.HTTPStatusError{
HTTPStatus: httpStatus,
Err: status.Error(codes.Unimplemented, http.StatusText(httpStatus)),
}
runtime.DefaultHTTPErrorHandler(ctx, mux, marshaler, w, r, err)
}
```
To use this routing error handler, construct the mux as follows:
```go
mux := runtime.NewServeMux(
runtime.WithRoutingErrorHandler(handleRoutingError),
)
```
## Disabling X-HTTP-Method-Override
By default, the gRPC-Gateway allows clients to send a `POST` request with an
`X-HTTP-Method-Override` header to override the HTTP method. For example, a
`POST` request with `X-HTTP-Method-Override: GET` will be routed as if it were
a `GET` request. This is part of the path length fallback behavior, which
allows HTML forms (which only support `GET` and `POST`) to call other methods.
This can lead to HTTP method confusion when your gateway sits behind a Web
Application Firewall (WAF) or reverse proxy that enforces method-based access
controls. For example, if a WAF is configured to only allow `POST` requests to
a particular endpoint, a client could send a `POST` with
`X-HTTP-Method-Override: DELETE` and the gateway would route the request to the
`DELETE` handler, bypassing the WAF's intended restrictions. The WAF sees a
`POST` request, but the gateway processes it as a `DELETE`.
To disable the `X-HTTP-Method-Override` header handling, use the
`WithDisableHTTPMethodOverride` option:
```go
mux := runtime.NewServeMux(
runtime.WithDisableHTTPMethodOverride(),
)
```
This disables only the method override header. The path length fallback (routing
a `POST` with `Content-Type: application/x-www-form-urlencoded` to a matching
`GET` handler) remains available unless separately disabled with
`WithDisablePathLengthFallback`.
================================================
FILE: docs/docs/mapping/examples.md
================================================
---
layout: default
title: Examples
nav_order: 0
parent: Mapping
---
# Examples
Examples are available under `examples/internal` directory.
- [`proto/examplepb/echo_service.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/proto/examplepb/echo_service.proto), [`proto/examplepb/a_bit_of_everything.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/proto/examplepb/a_bit_of_everything.proto), [`proto/examplepb/unannotated_echo_service.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/proto/examplepb/unannotated_echo_service.proto):
protobuf service definitions.
- [`proto/examplepb/echo_service.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/proto/examplepb/echo_service.pb.go), [`proto/examplepb/a_bit_of_everything.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/proto/examplepb/a_bit_of_everything.pb.go), [`proto/examplepb/unannotated_echo_service.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/proto/examplepb/unannotated_echo_service.pb.go):
generated Go service stubs and types.
- [`proto/examplepb/echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/proto/examplepb/echo_service.pb.gw.go), [`proto/examplepb/a_bit_of_everything.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go), [`proto/examplepb/unannotated_echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go):
generated gRPC-Gateway clients.
- [`proto/examplepb/unannotated_echo_service.yaml`](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/proto/examplepb/unannotated_echo_service.yaml):
gRPC API Configuration for `unannotated_echo_service.proto`.
- [`server/main.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/server/main.go):
service implementation.
- [`main.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/gateway/main.go):
entrypoint of the generated reverse proxy.
To use the same port for custom HTTP handlers (e.g. serving `swagger.json`),
gRPC-Gateway, and a gRPC server, see [this code example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) (and its accompanying
[blog post](https://coreos.com/blog/grpc-protobufs-swagger.html)).
================================================
FILE: docs/docs/mapping/grpc_api_configuration.md
================================================
---
layout: default
title: gRPC API Configuration
nav_order: 3
parent: Mapping
---
# gRPC API Configuration
In some situations annotating the proto file of service is not an option. For example, you might not have control over the proto file, or you might want to expose the same gRPC API multiple times in completely different ways.
gRPC-Gateway supports 2 ways of dealing with these situations:
- [gRPC API Configuration](#grpc-api-configuration)
- [`generate_unbound_methods`](#generate_unbound_methods)
- [Using an external configuration file](#using-an-external-configuration-file)
- [Usage of gRPC API Configuration YAML files](#usage-of-grpc-api-configuration-yaml-files)
## `generate_unbound_methods`
Providing this parameter to the `protoc` plugin will make it produce the HTTP mapping even for methods without any `HttpRule` annotation. This is similar to how [Cloud Endpoints behaves](https://cloud.google.com/endpoints/docs/grpc/transcoding#where_to_configure_transcoding) and uses the way [gRPC itself](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md) maps to HTTP/2:
- HTTP method is `POST`
- URI path is built from the service's name and method: `/<fully qualified service name>/<method name>` (e.g.: `/my.package.EchoService/Echo`)
- HTTP body is the serialized protobuf message.
NOTE: the same option is also supported by the `gen-openapiv2` plugin.
## Using an external configuration file
Google Cloud Platform offers a way to do this for services
hosted with them called ["gRPC API Configuration"](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config). It can be used to define the behavior of a gRPC API service without modifications to the service itself in the form of [YAML](https://en.wikipedia.org/wiki/YAML) configuration files.
gRPC-Gateway generators implement the [HTTP rules part](https://cloud.google.com/endpoints/docs/grpc-service-config/reference/rpc/google.api#httprule) of this specification. This allows you to take a completely unannotated service proto file, add a YAML file describing its HTTP endpoints and use them together like an annotated proto file with the gRPC-Gateway generators.
OpenAPI options may also be configured via ["OpenAPI Configuration"](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/internal/descriptor/openapiconfig/openapiconfig.proto) in the form of YAML configuration files.
### Usage of gRPC API Configuration YAML files
The following is equivalent to the basic [`README.md`](https://github.com/grpc-ecosystem/grpc-gateway/blob/main/README.md#usage) example but without direct
annotation for gRPC-Gateway in the proto file. Only some steps require minor changes to use a gRPC API Configuration YAML file instead:
1. Define your service in gRPC as usual
your_service.proto:
```protobuf
syntax = "proto3";
package your.service.v1;
option go_package = "github.com/yourorg/yourprotos/gen/go/your/service/v1";
message StringMessage {
string value = 1;
}
service YourService {
rpc Echo(StringMessage) returns (StringMessage) {}
}
```
2. Instead of annotating the proto file in this step leave it untouched
and create a `your_service.yaml` with the following content:
```yaml
type: google.api.Service
config_version: 3
http:
rules:
- selector: your.service.v1.YourService.Echo
post: /v1/example/echo
body: "*"
```
Use a [linter](http://www.yamllint.com/) to validate your YAML.
3. Generate gRPC stub as before
```sh
protoc -I . \
--go_out ./gen/go/ \
--go_opt paths=source_relative \
--go-grpc_out ./gen/go/ \
--go-grpc_opt paths=source_relative \
your/service/v1/your_service.proto
```
It will generate a stub file with path `./gen/go/your/service/v1/your_service.pb.go`.
4. Implement your service in gRPC as usual
5. Generate the reverse-proxy. Here we have to pass the path to
the `your_service.yaml` in addition to the proto file:
```sh
protoc -I . \
--grpc-gateway_out ./gen/go \
--grpc-gateway_opt paths=source_relative \
--grpc-gateway_opt grpc_api_configuration=path/to/your_service.yaml \
your/service/v1/your_service.proto
```
This will generate a reverse proxy `gen/go/your/service/v1/your_service.pb.gw.go` that is identical to the one produced for the annotated proto.
In situations where you only need the reverse-proxy you can use the `standalone=true` option when generating the code. This will ensure the `types` used within `your_service.pb.gw.go` reference the external source appropriately.
```
protoc -I . \
--grpc-gateway_out ./gen/go \
--grpc-gateway_opt paths=source_relative \
--grpc-gateway_opt standalone=true \
--grpc-gateway_opt grpc_api_configuration=path/to/your_service.yaml \
your/service/v1/your_service.proto
```
6. Generate the optional your_service.swagger.json
```sh
protoc -I . --openapiv2_out ./gen/go \
--openapiv2_opt grpc_api_configuration=path/to/your_service.yaml \
your/service/v1/your_service.proto
```
or using an OpenAPI configuration file
```sh
protoc -I . --openapiv2_out ./gen/go \
--openapiv2_opt grpc_api_configuration=path/to/your_service.yaml \
--openapiv2_opt openapi_configuration=path/to/your_service_swagger.yaml \
your/service/v1/your_service.proto
```
For an example of an OpenAPI configuration file, see [unannotated_echo_service.swagger.yaml](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/proto/examplepb/unannotated_echo_service.swagger.yaml), which adds OpenAPI options to [unannotated_echo_service.proto](https://github.com/grpc-ecosystem/grpc-gateway/tree/main/examples/internal/proto/examplepb/unannotated_echo_service.proto).
```sh
protoc -I . --openapiv2_out ./gen/go \
--openapiv2_opt grpc_api_configuration=path/to/your_service.yaml \
your/service/v1/your_service.proto
```
All other steps work as before. If you want you can remove the `googleapis` include path in step 3 and 4 as the unannotated proto no longer requires them.
================================================
FILE: docs/docs/mapping/httpbody_messages.md
================================================
---
layout: default
title: HttpBody Messages
nav_order: 1
parent: Mapping
---
# HttpBody Messages
The [HTTPBody](https://github.com/googleapis/googleapis/blob/master/google/api/httpbody.proto) messages allow a response message to be specified with custom data content and a custom content-type header. The values included in the HTTPBody response will be used verbatim in the returned message from the gateway. Make sure you format your response carefully!
## Example Usage
1. Define your service in gRPC with an httpbody response message
```protobuf
import "google/api/httpbody.proto";
import "google/api/annotations.proto";
import "google/protobuf/empty.proto";
service HttpBodyExampleService {
rpc HelloWorld(google.protobuf.Empty) returns (google.api.HttpBody) {
option (google.api.http) = {
get: "/helloworld"
};
}
rpc Download(google.protobuf.Empty) returns (stream google.api.HttpBody) {
option (google.api.http) = {
get: "/download"
};
}
}
```
3. Generate gRPC and reverse-proxy stubs and implement your service.
## Example service implementation
```go
func (*HttpBodyExampleService) Helloworld(ctx context.Context, in *empty.Empty) (*httpbody.HttpBody, error) {
return &httpbody.HttpBody{
ContentType: "text/html",
Data: []byte("Hello World"),
}, nil
}
func (HttpBodyExampleService) Download(_ *empty.Empty, stream HttpBodyExampleService_DownloadServer) error {
msgs := []*httpbody.HttpBody{
{
ContentType: "text/html",
Data: []byte("Hello 1"),
},
{
ContentType: "text/html",
Data: []byte("Hello 2"),
},
}
for _, msg := range msgs {
if err := stream.Send(msg); err != nil {
return err
}
}
return nil
}
```
================================================
FILE: docs/docs/mapping/index.md
================================================
---
layout: default
title: Mapping
nav_order: 2
has_children: true
---
================================================
FILE: docs/docs/mapping/patch_feature.md
================================================
---
layout: default
title: Patch feature
nav_order: 2
parent: Mapping
---
# Patch feature
The HTTP PATCH method allows a resource to be partially updated.
If a binding is mapped to patch and the request message has exactly one FieldMask message in it, additional code is rendered for the gateway handler that will populate the FieldMask based on the request body. FieldMask is treated as a regular field by the gateway if the request method is not PATCH, or if the HttpRule body is `"*"`
There are two scenarios:
- The FieldMask is hidden from the REST request as per the
[Google API design guide](https://cloud.google.com/apis/design/standard_methods#update) (as in the first additional binding in the
[UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/370d869f65d1ffb3d07187fb0db238eca2371ce3/examples/internal/proto/examplepb/a_bit_of_everything.proto#L428-L431) example). In this case, the FieldMask is updated from the request body and set in the gRPC request message.
- By default this feature is enabled, if you need to disable it, you can use the plugin option `allow_patch_feature=false`.
- Note: The same option is supported by the `protoc-gen-openapiv2` plugin.
- The FieldMask is exposed to the REST request (as in the second additional binding in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/370d869f65d1ffb3d07187fb0db238eca2371ce3/examples/internal/proto/examplepb/a_bit_of_everything.proto#L432-L435) example). For this case, the field mask is left untouched by the gateway.
## Example Usage
1. Create a PATCH request.
The PATCH request needs to include the message and the update mask.
```protobuf
// UpdateV2Request request for update includes the message and the update mask
message UpdateV2Request {
ABitOfEverything abe = 1;
google.protobuf.FieldMask update_mask = 2;
}
```
2. Define your service in gRPC
If you want to use PATCH with fieldmask hidden from REST request only include the request message in the body.
```protobuf
rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) {
option (google.api.http) = {
put: "/v2/example/a_bit_of_everything/{abe.uuid}"
body: "abe"
additional_bindings {
patch: "/v2/example/a_bit_of_everything/{abe.uuid}"
body: "abe"
}
};
}
```
If you want to use PATCH with fieldmask exposed to the REST request then include the entire request message.
```protobuf
rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) {
option (google.api.http) = {
patch: "/v2a/example/a_bit_of_everything/{abe.uuid}"
body: "*"
};
}
```
3. Generate gRPC and reverse-proxy stubs and implement your service.
## cURL examples
In the example below, we will partially update our ABitOfEverything resource by passing only the field we want to change. Since we are using the endpoint with field mask hidden we only need to pass the field we want to change ("string_value") and it will keep everything else in our resource the same.
```sh
$ curl \
--data '{"stringValue": "strprefix/foo"}' \
-X PATCH \
http://address:port/v2/example/a_bit_of_everything/1
```
If we know what fields we want to update then we can use PATCH with field mask approach. For this, we need to pass the resource and the update_mask. Below only the "single_nested" will get updated because that is what we specify in the field_mask.
```sh
$ curl \
--data '{"abe":{"singleNested":{"amount":457},"stringValue":"some value that will not get updated because not in the field mask"},"updateMask":"singleNested"}}' \
-X PATCH \
http://address:port/v2a/example/a_bit_of_everything/1
```
================================================
FILE: docs/docs/mapping/using_ref_with_responses.md
================================================
# Using arbitrary messages in response description
Assuming a protobuf file of the structure
```protobuf
syntax = "proto3";
package example.service.v1;
import "protoc-gen-openapiv2/options/annotations.proto";
service GenericService {
rpc GenericRPC(GenericRPCRequest) returns (GenericRPCResponse);
}
message GenericRPCRequest {
string id = 1;
}
message GenericRPCResponse {
string result = 1;
}
```
If you want your OpenAPI document to include a custom response for all RPCs defined in this protobuf file, you can add the following:
```protobuf
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {
responses: {
key: "400"
value: {
description: "Returned when the request is malformed."
schema: {
json_schema: {ref: ".example.service.v1.GenericResponse"} // Must match the fully qualified name of the message
}
}
}
};
message GenericResponse {
repeated string resources = 1;
repeated string errors = 2;
}
```
When generating, you will see the following response included in your OpenAPI document:
```json
"400": {
"description": "Returned when the request is malformed.",
"schema": {
"$ref": "#/definitions/v1GenericResponse"
}
},
```
The annotation can also be specified per-rpc.
================================================
FILE: docs/docs/operations/annotated_context.md
================================================
---
layout: default
title: Extracting the HTTP path pattern for a request
nav_order: 4
parent: Operations
---
# Extracting the HTTP path pattern for a request
It is often interesting to know what [HTTP path pattern](https://github.com/googleapis/googleapis/blob/869d32e2f0af2748ab530646053b23a2b80d9ca5/google/api/http.proto#L61-L87) was matched for a specific request, for example for metrics. This article explains how to extract the HTTP path pattern from the request context.
## Get HTTP Path pattern
1. Define the HTTP path in the proto annotation. For example:
```proto
syntax = "proto3";
option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb";
package grpc.gateway.examples.internal.proto.examplepb;
import "google/api/annotations.proto";
service LoginService {
rpc Login (LoginRequest) returns (LoginReply) {
option (google.api.http) = {
post: "/v1/example/login"
body: "*"
};
}
}
message LoginRequest {}
message LoginReply {}
```
2. At runtime, get the HTTP path pattern from the annotated context, for example using the `WithMetadata` function.
You can pass data to your backend by adding them to the gRPC metadata or push them to a metrics server.
```go
mux := runtime.NewServeMux(
runtime.WithMetadata(func(ctx context.Context, r *http.Request) metadata.MD {
md := make(map[string]string)
if method, ok := runtime.RPCMethod(ctx); ok {
md["method"] = method // /grpc.gateway.examples.internal.proto.examplepb.LoginService/Login
}
if pattern, ok := runtime.HTTPPathPattern(ctx); ok {
md["pattern"] = pattern // /v1/example/login
}
return metadata.New(md)
}),
)
```
================================================
FILE: docs/docs/operations/aws_gateway_integration.md
================================================
---
layout: default
title: AWS gateway integration
nav_order: 3
parent: Operations
---
# AWS gateway integration
## Import OpenAPI documentation into AWS API Gateway
The AWS API Gateway service allows importing of an OpenAPI specification to create a REST API. The process is very straightforward and can be found [here](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api.html).
Here are some tips to consider when importing the documentation:
1. Remove any circular dependencies (these aren't supported by the parser).
2. Remove security-related annotations (These annotations aren't well supported by the parser).
3. Max length of fields are reviewed by the parser but the errors aren't self-explanatory. Review the [specification](https://swagger.io/specification/v2/) to verify that the requirements are met.
4. API gateway errors aren't great, but you can use this [page](https://apidevtools.org/swagger-parser/online/) for structure validation.
================================================
FILE: docs/docs/operations/health_check.md
================================================
---
layout: default
title: Health check
nav_order: 1
parent: Operations
---
# Health check
## With the [gRPC Health Checking Protocol](https://github.com/grpc/grpc/blob/master/doc/health-checking.md)
To use the gRPC health checking protocol you must add the two health checking methods, `Watch` and `Check`.
## Registering the health server
1. Add `google.golang.org/grpc/health/grpc_health_v1` to your imports
2. Register the health server with `grpc_health_v1.RegisterHealthServer(grpcServer, yourService)`
## Adding the health check methods
1. Check method
```go
func (s *serviceServer) Check(ctx context.Context, in *health.HealthCheckRequest) (*health.HealthCheckResponse, error) {
return &health.HealthCheckResponse{Status: health.HealthCheckResponse_SERVING}, nil
}
```
2. Watch method
```go
func (s *serviceServer) Watch(in *health.HealthCheckRequest, _ health.Health_WatchServer) error {
// Example of how to register both methods but only implement the Check method.
return status.Error(codes.Unimplemented, "unimplemented")
}
```
3. You can test the functionality with [GRPC health probe](https://github.com/grpc-ecosystem/grpc-health-probe).
## Adding `/healthz` endpoint to runtime.ServeMux
To automatically register a `/healthz` endpoint in your `ServeMux` you can use
the `ServeMuxOption` `WithHealthzEndpoint`
which takes in a connection to your registered gRPC server.
This endpoint will forward a request to the `Check` method described above to really check the health of the
whole system, not only the gateway itself. If your server doesn't implement the health checking protoc
gitextract_hqbjs28v/
├── .bazelci/
│ └── presubmit.yml
├── .bazelrc
├── .bazelversion
├── .devcontainer/
│ └── devcontainer.json
├── .git-blame-ignore-revs
├── .github/
│ ├── Dockerfile
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug.md
│ │ ├── documentation.md
│ │ └── feature.md
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── README_GITHUB.md
│ ├── dependabot.yml
│ ├── stale.yml
│ └── workflows/
│ ├── ci.yml
│ ├── devcontainer.yml
│ ├── release.yml
│ └── renovate.yml
├── .gitignore
├── .goreleaser.yml
├── ADOPTERS.md
├── BUILD.bazel
├── CONTRIBUTING.md
├── LICENSE
├── MODULE.bazel
├── Makefile
├── README.md
├── WORKSPACE
├── bin/
│ └── .gitignore
├── buf.gen.yaml
├── buf.yaml
├── docs/
│ ├── .gitignore
│ ├── Gemfile
│ ├── _config.yml
│ ├── _layouts/
│ │ └── default.html
│ ├── docs/
│ │ ├── contributing/
│ │ │ ├── 2020_season_of_docs.md
│ │ │ ├── getting_started.md
│ │ │ └── index.md
│ │ ├── development/
│ │ │ ├── grpc-gateway_v2_migration_guide.md
│ │ │ ├── index.md
│ │ │ └── installation_for_cygwin.md
│ │ ├── faq.md
│ │ ├── mapping/
│ │ │ ├── binary_file_uploads.md
│ │ │ ├── custom_marshalers.md
│ │ │ ├── customizing_openapi_output.md
│ │ │ ├── customizing_your_gateway.md
│ │ │ ├── examples.md
│ │ │ ├── grpc_api_configuration.md
│ │ │ ├── httpbody_messages.md
│ │ │ ├── index.md
│ │ │ ├── patch_feature.md
│ │ │ └── using_ref_with_responses.md
│ │ ├── operations/
│ │ │ ├── annotated_context.md
│ │ │ ├── aws_gateway_integration.md
│ │ │ ├── health_check.md
│ │ │ ├── index.md
│ │ │ ├── inject_router.md
│ │ │ ├── logging.md
│ │ │ └── tracing.md
│ │ ├── overview/
│ │ │ ├── background.md
│ │ │ ├── index.md
│ │ │ └── usage.md
│ │ ├── related_projects.md
│ │ ├── tutorials/
│ │ │ ├── adding_annotations.md
│ │ │ ├── creating_main.go.md
│ │ │ ├── generating_stubs/
│ │ │ │ ├── index.md
│ │ │ │ ├── using_buf.md
│ │ │ │ └── using_protoc.md
│ │ │ ├── index.md
│ │ │ ├── introduction.md
│ │ │ ├── learn_more.md
│ │ │ └── simple_hello_world.md
│ │ └── using_custom_query_parser.md
│ ├── index.md
│ └── run.sh
├── examples/
│ └── internal/
│ ├── README.md
│ ├── browser/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── a_bit_of_everything_service.spec.js
│ │ ├── bin/
│ │ │ └── .gitignore
│ │ ├── bower.json
│ │ ├── echo_service.spec.js
│ │ ├── gulpfile.js
│ │ ├── index.html
│ │ ├── package.json
│ │ ├── spec/
│ │ │ └── support/
│ │ │ └── jasmine-browser.json
│ │ └── webpack.config.js
│ ├── clients/
│ │ ├── abe/
│ │ │ ├── .gitignore
│ │ │ ├── .swagger-codegen/
│ │ │ │ └── VERSION
│ │ │ ├── .swagger-codegen-ignore
│ │ │ ├── BUILD.bazel
│ │ │ ├── api/
│ │ │ │ └── swagger.yaml
│ │ │ ├── api_a_bit_of_everything.go
│ │ │ ├── api_camel_case_service_name.go
│ │ │ ├── api_echo_rpc.go
│ │ │ ├── api_snake_enum_service.go
│ │ │ ├── client.go
│ │ │ ├── configuration.go
│ │ │ ├── enum_helper.go
│ │ │ ├── model_a_bit_of_everything.go
│ │ │ ├── model_a_bit_of_everything_1.go
│ │ │ ├── model_a_bit_of_everything_2.go
│ │ │ ├── model_a_bit_of_everything_3.go
│ │ │ ├── model_a_bit_of_everything_4.go
│ │ │ ├── model_a_bit_of_everything_5.go
│ │ │ ├── model_a_bit_of_everything_6.go
│ │ │ ├── model_a_bit_of_everything_7.go
│ │ │ ├── model_a_bit_of_everything_8.go
│ │ │ ├── model_a_bit_of_everything_nested.go
│ │ │ ├── model_a_bit_of_everything_service_deep_path_echo_body.go
│ │ │ ├── model_a_bit_of_everything_service_deep_path_echo_body_single_nested.go
│ │ │ ├── model_a_bit_of_everything_service_post_with_empty_body_body.go
│ │ │ ├── model_a_bit_of_everything_service_update_body.go
│ │ │ ├── model_a_bit_of_everything_service_update_v2_body.go
│ │ │ ├── model_book.go
│ │ │ ├── model_examplepb_a_bit_of_everything.go
│ │ │ ├── model_examplepb_a_bit_of_everything_repeated.go
│ │ │ ├── model_examplepb_a_bit_of_everything_service_update_body.go
│ │ │ ├── model_examplepb_bar.go
│ │ │ ├── model_examplepb_body.go
│ │ │ ├── model_examplepb_book.go
│ │ │ ├── model_examplepb_check_status_response.go
│ │ │ ├── model_examplepb_error_object.go
│ │ │ ├── model_examplepb_error_response.go
│ │ │ ├── model_examplepb_numeric_enum.go
│ │ │ ├── model_examplepb_required_message_type_request.go
│ │ │ ├── model_examplepb_snake_case_0_enum.go
│ │ │ ├── model_examplepb_snake_case_enum.go
│ │ │ ├── model_examplepb_snake_enum_response.go
│ │ │ ├── model_google_rpc_status.go
│ │ │ ├── model_message_path_enum_nested_path_enum.go
│ │ │ ├── model_nested_deep_enum.go
│ │ │ ├── model_oneofenum_example_enum.go
│ │ │ ├── model_pathenum_path_enum.go
│ │ │ ├── model_pathenum_snake_case_for_import.go
│ │ │ ├── model_proto_examplepb_foo.go
│ │ │ ├── model_protobuf_any.go
│ │ │ ├── model_sub_string_message.go
│ │ │ ├── model_the_book_to_update_.go
│ │ │ ├── model_the_book_to_update__1.go
│ │ │ ├── model_the_book_to_update_the_books_name_field_is_used_to_identify_the_book_to_be_updated_format_publisherspublisherbooksbook.go
│ │ │ ├── model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask.go
│ │ │ ├── model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask_1.go
│ │ │ ├── model_v1exampledeep_pathsingle_nested_name_single_nested.go
│ │ │ └── response.go
│ │ ├── echo/
│ │ │ ├── .gitignore
│ │ │ ├── .swagger-codegen/
│ │ │ │ └── VERSION
│ │ │ ├── .swagger-codegen-ignore
│ │ │ ├── BUILD.bazel
│ │ │ ├── api/
│ │ │ │ └── swagger.yaml
│ │ │ ├── api_echo_service.go
│ │ │ ├── client.go
│ │ │ ├── configuration.go
│ │ │ ├── model_examplepb_dynamic_message.go
│ │ │ ├── model_examplepb_dynamic_message_update.go
│ │ │ ├── model_examplepb_embedded.go
│ │ │ ├── model_examplepb_nested_message.go
│ │ │ ├── model_examplepb_simple_message.go
│ │ │ ├── model_examplepb_status_check_request.go
│ │ │ ├── model_examplepb_status_check_response.go
│ │ │ ├── model_google_rpc_status.go
│ │ │ ├── model_proto_sub2_status.go
│ │ │ ├── model_proto_sub_status.go
│ │ │ ├── model_protobuf_any.go
│ │ │ ├── model_protobuf_null_value.go
│ │ │ └── response.go
│ │ ├── generateunboundmethods/
│ │ │ ├── .gitignore
│ │ │ ├── .swagger-codegen/
│ │ │ │ └── VERSION
│ │ │ ├── .swagger-codegen-ignore
│ │ │ ├── BUILD.bazel
│ │ │ ├── api/
│ │ │ │ └── swagger.yaml
│ │ │ ├── api_generate_unbound_methods_echo_service.go
│ │ │ ├── client.go
│ │ │ ├── configuration.go
│ │ │ ├── docs/
│ │ │ │ ├── ExamplepbGenerateUnboundMethodsSimpleMessage.md
│ │ │ │ ├── GenerateUnboundMethodsEchoServiceApi.md
│ │ │ │ ├── ProtobufAny.md
│ │ │ │ └── RuntimeError.md
│ │ │ ├── model_examplepb_generate_unbound_methods_simple_message.go
│ │ │ ├── model_protobuf_any.go
│ │ │ ├── model_rpc_status.go
│ │ │ ├── model_runtime_error.go
│ │ │ └── response.go
│ │ ├── responsebody/
│ │ │ ├── .gitignore
│ │ │ ├── .swagger-codegen/
│ │ │ │ └── VERSION
│ │ │ ├── .swagger-codegen-ignore
│ │ │ ├── BUILD.bazel
│ │ │ ├── api/
│ │ │ │ └── swagger.yaml
│ │ │ ├── api_response_body_service.go
│ │ │ ├── client.go
│ │ │ ├── configuration.go
│ │ │ ├── docs/
│ │ │ │ ├── ExamplepbRepeatedResponseBodyOut.md
│ │ │ │ ├── ExamplepbRepeatedResponseBodyOutResponse.md
│ │ │ │ ├── ExamplepbRepeatedResponseStrings.md
│ │ │ │ ├── ExamplepbResponseBodyMessage.md
│ │ │ │ ├── ExamplepbResponseBodyMessageResponse.md
│ │ │ │ ├── ExamplepbResponseBodyOut.md
│ │ │ │ ├── ExamplepbResponseBodyOutResponse.md
│ │ │ │ ├── ExamplepbResponseBodyReq.md
│ │ │ │ ├── ExamplepbResponseBodyValue.md
│ │ │ │ ├── GoogleRpcStatus.md
│ │ │ │ ├── ProtobufAny.md
│ │ │ │ ├── ResponseBodyServiceApi.md
│ │ │ │ ├── ResponseResponseType.md
│ │ │ │ ├── RpcStatus.md
│ │ │ │ ├── RuntimeError.md
│ │ │ │ └── StreamResultOfExamplepbResponseBodyOut.md
│ │ │ ├── model_examplepb_repeated_response_body_out.go
│ │ │ ├── model_examplepb_repeated_response_body_out_response.go
│ │ │ ├── model_examplepb_repeated_response_strings.go
│ │ │ ├── model_examplepb_response_body_out.go
│ │ │ ├── model_examplepb_response_body_out_response.go
│ │ │ ├── model_examplepb_response_body_value.go
│ │ │ ├── model_google_rpc_status.go
│ │ │ ├── model_protobuf_any.go
│ │ │ ├── model_response_response_type.go
│ │ │ ├── model_stream_result_of_examplepb_response_body_out.go
│ │ │ └── response.go
│ │ ├── staticcheck.conf
│ │ └── unannotatedecho/
│ │ ├── .gitignore
│ │ ├── .swagger-codegen/
│ │ │ └── VERSION
│ │ ├── .swagger-codegen-ignore
│ │ ├── BUILD.bazel
│ │ ├── api/
│ │ │ └── swagger.yaml
│ │ ├── api_unannotated_echo_service.go
│ │ ├── client.go
│ │ ├── configuration.go
│ │ ├── model_examplepb_numeric_enum.go
│ │ ├── model_examplepb_unannotated_embedded.go
│ │ ├── model_examplepb_unannotated_nested_message.go
│ │ ├── model_examplepb_unannotated_simple_message.go
│ │ ├── model_protobuf_any.go
│ │ ├── model_rpc_status.go
│ │ └── response.go
│ ├── cmd/
│ │ ├── example-gateway-server/
│ │ │ ├── BUILD.bazel
│ │ │ └── main.go
│ │ └── example-grpc-server/
│ │ ├── BUILD.bazel
│ │ └── main.go
│ ├── gateway/
│ │ ├── BUILD.bazel
│ │ ├── doc.go
│ │ ├── gateway.go
│ │ ├── handlers.go
│ │ └── main.go
│ ├── helloworld/
│ │ ├── BUILD.bazel
│ │ ├── helloworld.pb.go
│ │ ├── helloworld.pb.gw.go
│ │ ├── helloworld.proto
│ │ ├── helloworld.swagger.json
│ │ └── helloworld_grpc.pb.go
│ ├── integration/
│ │ ├── BUILD.bazel
│ │ ├── client_test.go
│ │ ├── integration_test.go
│ │ └── main_test.go
│ ├── proto/
│ │ ├── examplepb/
│ │ │ ├── BUILD.bazel
│ │ │ ├── a_bit_of_everything.pb.go
│ │ │ ├── a_bit_of_everything.pb.gw.go
│ │ │ ├── a_bit_of_everything.proto
│ │ │ ├── a_bit_of_everything.swagger.json
│ │ │ ├── a_bit_of_everything_grpc.pb.go
│ │ │ ├── camel_case_service.pb.go
│ │ │ ├── camel_case_service.pb.gw.go
│ │ │ ├── camel_case_service.proto
│ │ │ ├── camel_case_service.swagger.json
│ │ │ ├── camel_case_service_grpc.pb.go
│ │ │ ├── echo_service.pb.go
│ │ │ ├── echo_service.pb.gw.go
│ │ │ ├── echo_service.proto
│ │ │ ├── echo_service.swagger.json
│ │ │ ├── echo_service_grpc.pb.go
│ │ │ ├── enum_with_single_value.buf.gen.yaml
│ │ │ ├── enum_with_single_value.pb.go
│ │ │ ├── enum_with_single_value.pb.gw.go
│ │ │ ├── enum_with_single_value.proto
│ │ │ ├── enum_with_single_value.swagger.json
│ │ │ ├── enum_with_single_value_grpc.pb.go
│ │ │ ├── excess_body.pb.go
│ │ │ ├── excess_body.pb.gw.go
│ │ │ ├── excess_body.proto
│ │ │ ├── excess_body.swagger.json
│ │ │ ├── excess_body_grpc.pb.go
│ │ │ ├── flow_combination.pb.go
│ │ │ ├── flow_combination.pb.gw.go
│ │ │ ├── flow_combination.proto
│ │ │ ├── flow_combination.swagger.json
│ │ │ ├── flow_combination_grpc.pb.go
│ │ │ ├── generate_unbound_methods.buf.gen.yaml
│ │ │ ├── generate_unbound_methods.pb.go
│ │ │ ├── generate_unbound_methods.pb.gw.go
│ │ │ ├── generate_unbound_methods.proto
│ │ │ ├── generate_unbound_methods.swagger.json
│ │ │ ├── generate_unbound_methods_grpc.pb.go
│ │ │ ├── generated_input.proto
│ │ │ ├── generated_input.swagger.json
│ │ │ ├── ignore_comment.buf.gen.yaml
│ │ │ ├── ignore_comment.pb.go
│ │ │ ├── ignore_comment.pb.gw.go
│ │ │ ├── ignore_comment.proto
│ │ │ ├── ignore_comment.swagger.json
│ │ │ ├── ignore_comment_grpc.pb.go
│ │ │ ├── non_standard_names.pb.go
│ │ │ ├── non_standard_names.pb.gw.go
│ │ │ ├── non_standard_names.proto
│ │ │ ├── non_standard_names.swagger.json
│ │ │ ├── non_standard_names_grpc.pb.go
│ │ │ ├── opaque.buf.gen.yaml
│ │ │ ├── opaque.pb.go
│ │ │ ├── opaque.pb.gw.go
│ │ │ ├── opaque.proto
│ │ │ ├── opaque.swagger.json
│ │ │ ├── opaque_grpc.pb.go
│ │ │ ├── openapi_merge.buf.gen.yaml
│ │ │ ├── openapi_merge.swagger.json
│ │ │ ├── openapi_merge_a.pb.go
│ │ │ ├── openapi_merge_a.pb.gw.go
│ │ │ ├── openapi_merge_a.proto
│ │ │ ├── openapi_merge_a.swagger.json
│ │ │ ├── openapi_merge_a_grpc.pb.go
│ │ │ ├── openapi_merge_b.pb.go
│ │ │ ├── openapi_merge_b.pb.gw.go
│ │ │ ├── openapi_merge_b.proto
│ │ │ ├── openapi_merge_b.swagger.json
│ │ │ ├── openapi_merge_b_grpc.pb.go
│ │ │ ├── proto3_field_semantics.buf.gen.yaml
│ │ │ ├── proto3_field_semantics.pb.go
│ │ │ ├── proto3_field_semantics.pb.gw.go
│ │ │ ├── proto3_field_semantics.proto
│ │ │ ├── proto3_field_semantics.swagger.json
│ │ │ ├── proto3_field_semantics_grpc.pb.go
│ │ │ ├── remove_internal_comment.buf.gen.yaml
│ │ │ ├── remove_internal_comment.pb.go
│ │ │ ├── remove_internal_comment.pb.gw.go
│ │ │ ├── remove_internal_comment.proto
│ │ │ ├── remove_internal_comment.swagger.json
│ │ │ ├── remove_internal_comment_grpc.pb.go
│ │ │ ├── response_body_service.pb.go
│ │ │ ├── response_body_service.pb.gw.go
│ │ │ ├── response_body_service.proto
│ │ │ ├── response_body_service.swagger.json
│ │ │ ├── response_body_service_grpc.pb.go
│ │ │ ├── standalone_echo_service.buf.gen.yaml
│ │ │ ├── standalone_echo_service.yaml
│ │ │ ├── stream.pb.go
│ │ │ ├── stream.pb.gw.go
│ │ │ ├── stream.proto
│ │ │ ├── stream.swagger.json
│ │ │ ├── stream_grpc.pb.go
│ │ │ ├── unannotated_echo_service.buf.gen.yaml
│ │ │ ├── unannotated_echo_service.pb.go
│ │ │ ├── unannotated_echo_service.pb.gw.go
│ │ │ ├── unannotated_echo_service.proto
│ │ │ ├── unannotated_echo_service.swagger.json
│ │ │ ├── unannotated_echo_service.swagger.yaml
│ │ │ ├── unannotated_echo_service.yaml
│ │ │ ├── unannotated_echo_service_grpc.pb.go
│ │ │ ├── use_go_template.buf.gen.yaml
│ │ │ ├── use_go_template.pb.go
│ │ │ ├── use_go_template.pb.gw.go
│ │ │ ├── use_go_template.proto
│ │ │ ├── use_go_template.swagger.json
│ │ │ ├── use_go_template_grpc.pb.go
│ │ │ ├── visibility_rule_echo_service.pb.go
│ │ │ ├── visibility_rule_echo_service.pb.gw.go
│ │ │ ├── visibility_rule_echo_service.proto
│ │ │ ├── visibility_rule_echo_service_grpc.pb.go
│ │ │ ├── visibility_rule_enums_as_ints_echo_service.buf.gen.yaml
│ │ │ ├── visibility_rule_enums_as_ints_echo_service.swagger.json
│ │ │ ├── visibility_rule_internal_echo_service.buf.gen.yaml
│ │ │ ├── visibility_rule_internal_echo_service.swagger.json
│ │ │ ├── visibility_rule_none_echo_service.buf.gen.yaml
│ │ │ ├── visibility_rule_none_echo_service.swagger.json
│ │ │ ├── visibility_rule_preview_and_internal_echo_service.buf.gen.yaml
│ │ │ ├── visibility_rule_preview_and_internal_echo_service.swagger.json
│ │ │ ├── visibility_rule_preview_echo_service.buf.gen.yaml
│ │ │ ├── visibility_rule_preview_echo_service.swagger.json
│ │ │ ├── wrappers.pb.go
│ │ │ ├── wrappers.pb.gw.go
│ │ │ ├── wrappers.proto
│ │ │ ├── wrappers.swagger.json
│ │ │ └── wrappers_grpc.pb.go
│ │ ├── oneofenum/
│ │ │ ├── BUILD.bazel
│ │ │ ├── oneof_enum.pb.go
│ │ │ ├── oneof_enum.proto
│ │ │ └── oneof_enum.swagger.json
│ │ ├── pathenum/
│ │ │ ├── BUILD.bazel
│ │ │ ├── path_enum.pb.go
│ │ │ ├── path_enum.proto
│ │ │ └── path_enum.swagger.json
│ │ ├── standalone/
│ │ │ ├── BUILD.bazel
│ │ │ └── unannotated_echo_service.pb.gw.go
│ │ ├── sub/
│ │ │ ├── BUILD.bazel
│ │ │ ├── camel_case_message.pb.go
│ │ │ ├── camel_case_message.proto
│ │ │ ├── camel_case_message.swagger.json
│ │ │ ├── message.pb.go
│ │ │ ├── message.proto
│ │ │ └── message.swagger.json
│ │ └── sub2/
│ │ ├── BUILD.bazel
│ │ ├── message.pb.go
│ │ ├── message.proto
│ │ └── message.swagger.json
│ └── server/
│ ├── BUILD.bazel
│ ├── a_bit_of_everything.go
│ ├── echo.go
│ ├── excess_body.go
│ ├── fieldmask_helper.go
│ ├── flow_combination.go
│ ├── main.go
│ ├── non_standard_names.go
│ ├── responsebody.go
│ └── unannotatedecho.go
├── go.mod
├── go.sum
├── internal/
│ ├── casing/
│ │ ├── BUILD.bazel
│ │ ├── LICENSE.md
│ │ ├── README.md
│ │ ├── camel.go
│ │ └── camel_test.go
│ ├── codegenerator/
│ │ ├── BUILD.bazel
│ │ ├── doc.go
│ │ ├── parse_req.go
│ │ ├── parse_req_test.go
│ │ └── supported_features.go
│ ├── descriptor/
│ │ ├── BUILD.bazel
│ │ ├── apiconfig/
│ │ │ ├── BUILD.bazel
│ │ │ ├── apiconfig.pb.go
│ │ │ ├── apiconfig.proto
│ │ │ └── apiconfig.swagger.json
│ │ ├── grpc_api_configuration.go
│ │ ├── grpc_api_configuration_test.go
│ │ ├── openapi_configuration.go
│ │ ├── openapi_configuration_test.go
│ │ ├── openapiconfig/
│ │ │ ├── BUILD.bazel
│ │ │ ├── openapiconfig.pb.go
│ │ │ ├── openapiconfig.proto
│ │ │ └── openapiconfig.swagger.json
│ │ ├── registry.go
│ │ ├── registry_test.go
│ │ ├── services.go
│ │ ├── services_test.go
│ │ ├── types.go
│ │ └── types_test.go
│ ├── generator/
│ │ ├── BUILD.bazel
│ │ └── generator.go
│ └── httprule/
│ ├── BUILD.bazel
│ ├── compile.go
│ ├── compile_test.go
│ ├── fuzz.go
│ ├── parse.go
│ ├── parse_test.go
│ ├── types.go
│ └── types_test.go
├── non_module_deps.bzl
├── protoc-gen-grpc-gateway/
│ ├── BUILD.bazel
│ ├── internal/
│ │ └── gengateway/
│ │ ├── BUILD.bazel
│ │ ├── doc.go
│ │ ├── generator.go
│ │ ├── generator_test.go
│ │ ├── template.go
│ │ └── template_test.go
│ └── main.go
├── protoc-gen-openapiv2/
│ ├── BUILD.bazel
│ ├── defs.bzl
│ ├── internal/
│ │ └── genopenapi/
│ │ ├── BUILD.bazel
│ │ ├── cycle_test.go
│ │ ├── doc.go
│ │ ├── format.go
│ │ ├── format_test.go
│ │ ├── generator.go
│ │ ├── generator_test.go
│ │ ├── helpers.go
│ │ ├── helpers_go111_old.go
│ │ ├── helpers_test.go
│ │ ├── naming.go
│ │ ├── naming_test.go
│ │ ├── template.go
│ │ ├── template_fuzz_test.go
│ │ ├── template_test.go
│ │ ├── testdata/
│ │ │ └── generator/
│ │ │ ├── path_item_object.prototext
│ │ │ ├── path_item_object.swagger.yaml
│ │ │ ├── x_go_type.prototext
│ │ │ └── x_go_type.swagger.yaml
│ │ ├── types.go
│ │ └── types_test.go
│ ├── main.go
│ ├── main_test.go
│ └── options/
│ ├── BUILD.bazel
│ ├── annotations.pb.go
│ ├── annotations.proto
│ ├── annotations_protoopaque.pb.go
│ ├── buf.gen.yaml
│ ├── openapiv2.pb.go
│ ├── openapiv2.proto
│ └── openapiv2_protoopaque.pb.go
├── renovate.json
├── repositories.bzl
├── runtime/
│ ├── BUILD.bazel
│ ├── context.go
│ ├── context_test.go
│ ├── convert.go
│ ├── convert_test.go
│ ├── doc.go
│ ├── errors.go
│ ├── errors_test.go
│ ├── fieldmask.go
│ ├── fieldmask_test.go
│ ├── handler.go
│ ├── handler_test.go
│ ├── internal/
│ │ └── examplepb/
│ │ ├── BUILD.bazel
│ │ ├── example.pb.go
│ │ ├── example.proto
│ │ ├── example.swagger.json
│ │ ├── non_standard_names.pb.go
│ │ ├── non_standard_names.proto
│ │ ├── non_standard_names.swagger.json
│ │ ├── non_standard_names_grpc.pb.go
│ │ ├── proto2.pb.go
│ │ ├── proto2.proto
│ │ ├── proto2.swagger.json
│ │ ├── proto3.pb.go
│ │ ├── proto3.proto
│ │ └── proto3.swagger.json
│ ├── marshal_httpbodyproto.go
│ ├── marshal_httpbodyproto_test.go
│ ├── marshal_json.go
│ ├── marshal_json_test.go
│ ├── marshal_jsonpb.go
│ ├── marshal_jsonpb_test.go
│ ├── marshal_proto.go
│ ├── marshal_proto_test.go
│ ├── marshaler.go
│ ├── marshaler_registry.go
│ ├── marshaler_registry_test.go
│ ├── mux.go
│ ├── mux_internal_test.go
│ ├── mux_test.go
│ ├── pattern.go
│ ├── pattern_test.go
│ ├── proto2_convert.go
│ ├── query.go
│ ├── query_fuzz_test.go
│ └── query_test.go
└── utilities/
├── BUILD.bazel
├── doc.go
├── pattern.go
├── readerfactory.go
├── string_array_flag.go
├── string_array_flag_test.go
├── trie.go
└── trie_test.go
Showing preview only (637K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6259 symbols across 280 files)
FILE: examples/internal/browser/gulpfile.js
constant SERVER_MODULE (line 11) | const SERVER_MODULE = 'github.com/grpc-ecosystem/grpc-gateway/v2/example...
constant GATEWAY_MODULE (line 12) | const GATEWAY_MODULE = 'github.com/grpc-ecosystem/grpc-gateway/v2/exampl...
function validateModulePath (line 18) | function validateModulePath(modulePath) {
function cleanupProcesses (line 25) | function cleanupProcesses() {
function buildServer (line 42) | async function buildServer() {
function buildGateway (line 59) | async function buildGateway() {
function build (line 76) | async function build() {
function startServer (line 82) | async function startServer() {
function startGateway (line 114) | async function startGateway() {
function bundleSpecs (line 149) | async function bundleSpecs() {
function generateJasmineHTML (line 171) | function generateJasmineHTML(jasmineCore, jasmineHtml, includeResultsCap...
function loadJasmineFiles (line 227) | function loadJasmineFiles() {
function createTestServer (line 238) | function createTestServer(htmlContent, specBundle) {
function runTests (line 250) | async function runTests() {
function serve (line 344) | async function serve() {
FILE: examples/internal/clients/abe/api_a_bit_of_everything.go
type ABitOfEverythingApiService (line 28) | type ABitOfEverythingApiService
method ABitOfEverythingServiceCheckExternalNestedPathEnum (line 37) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceCheckExter...
method ABitOfEverythingServiceCheckExternalPathEnum (line 193) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceCheckExter...
method ABitOfEverythingServiceCheckGetQueryParams (line 445) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceCheckGetQu...
method ABitOfEverythingServiceCheckNestedEnumGetQueryParams (line 829) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceCheckNeste...
method ABitOfEverythingServiceCheckPostQueryParams (line 1210) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceCheckPostQ...
method ABitOfEverythingServiceCheckStatus (line 1493) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceCheckStatu...
method ABitOfEverythingServiceCreate (line 1732) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceCreate(ctx...
method ABitOfEverythingServiceCreateBody (line 1993) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceCreateBody...
method ABitOfEverythingServiceCreateBook (line 2158) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceCreateBook...
method ABitOfEverythingServiceCustom (line 2418) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceCustom(ctx...
method ABitOfEverythingServiceCustom2 (line 2809) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceCustom2(ct...
method ABitOfEverythingServiceCustomOptionsRequest (line 3199) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceCustomOpti...
method ABitOfEverythingServiceDeepPathEcho (line 3449) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceDeepPathEc...
method ABitOfEverythingServiceDelete (line 3607) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceDelete(ctx...
method ABitOfEverythingServiceDoubleColon (line 3862) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceDoubleColo...
method ABitOfEverythingServiceErrorWithDetails (line 4154) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceErrorWithD...
method ABitOfEverythingServiceExists (line 4408) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceExists(ctx...
method ABitOfEverythingServiceGetMessageWithBody (line 4658) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceGetMessage...
method ABitOfEverythingServiceGetQuery (line 4915) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceGetQuery(c...
method ABitOfEverythingServiceGetRepeatedQuery (line 5210) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceGetRepeate...
method ABitOfEverythingServiceLookup (line 5429) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceLookup(ctx...
method ABitOfEverythingServiceOverwriteRequestContentType (line 5585) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceOverwriteR...
method ABitOfEverythingServiceOverwriteResponseContentType (line 5741) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceOverwriteR...
method ABitOfEverythingServicePostOneofEnum (line 5896) | func (a *ABitOfEverythingApiService) ABitOfEverythingServicePostOneofE...
method ABitOfEverythingServicePostRequiredMessageType (line 6053) | func (a *ABitOfEverythingApiService) ABitOfEverythingServicePostRequir...
method ABitOfEverythingServicePostWithEmptyBody (line 6211) | func (a *ABitOfEverythingApiService) ABitOfEverythingServicePostWithEm...
method ABitOfEverythingServiceTimeout (line 6368) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceTimeout(ct...
method ABitOfEverythingServiceUpdate (line 6524) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceUpdate(ctx...
method ABitOfEverythingServiceUpdateBook (line 6690) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceUpdateBook...
method ABitOfEverythingServiceUpdateV2 (line 6859) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceUpdateV2(c...
method ABitOfEverythingServiceUpdateV22 (line 7021) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceUpdateV22(...
method ABitOfEverythingServiceUpdateV23 (line 7180) | func (a *ABitOfEverythingApiService) ABitOfEverythingServiceUpdateV23(...
type ABitOfEverythingServiceCheckGetQueryParamsOpts (line 401) | type ABitOfEverythingServiceCheckGetQueryParamsOpts struct
type ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts (line 785) | type ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts struct
type ABitOfEverythingServiceCheckPostQueryParamsOpts (line 1168) | type ABitOfEverythingServiceCheckPostQueryParamsOpts struct
type ABitOfEverythingServiceCreateOpts (line 1702) | type ABitOfEverythingServiceCreateOpts struct
type ABitOfEverythingServiceCreateBookOpts (line 2154) | type ABitOfEverythingServiceCreateBookOpts struct
type ABitOfEverythingServiceCustomOpts (line 2372) | type ABitOfEverythingServiceCustomOpts struct
type ABitOfEverythingServiceCustom2Opts (line 2764) | type ABitOfEverythingServiceCustom2Opts struct
type ABitOfEverythingServiceCustomOptionsRequestOpts (line 3153) | type ABitOfEverythingServiceCustomOptionsRequestOpts struct
type ABitOfEverythingServiceDoubleColonOpts (line 3816) | type ABitOfEverythingServiceDoubleColonOpts struct
type ABitOfEverythingServiceExistsOpts (line 4362) | type ABitOfEverythingServiceExistsOpts struct
type ABitOfEverythingServiceGetQueryOpts (line 4869) | type ABitOfEverythingServiceGetQueryOpts struct
type ABitOfEverythingServiceUpdateBookOpts (line 6686) | type ABitOfEverythingServiceUpdateBookOpts struct
type ABitOfEverythingServiceUpdateV2Opts (line 6855) | type ABitOfEverythingServiceUpdateV2Opts struct
FILE: examples/internal/clients/abe/api_camel_case_service_name.go
type CamelCaseServiceNameApiService (line 26) | type CamelCaseServiceNameApiService
method CamelCaseServiceNameEmpty (line 34) | func (a *CamelCaseServiceNameApiService) CamelCaseServiceNameEmpty(ctx...
FILE: examples/internal/clients/abe/api_echo_rpc.go
type EchoRpcApiService (line 28) | type EchoRpcApiService
method ABitOfEverythingServiceEcho (line 38) | func (a *EchoRpcApiService) ABitOfEverythingServiceEcho(ctx context.Co...
method ABitOfEverythingServiceEcho2 (line 206) | func (a *EchoRpcApiService) ABitOfEverythingServiceEcho2(ctx context.C...
method ABitOfEverythingServiceEcho3 (line 381) | func (a *EchoRpcApiService) ABitOfEverythingServiceEcho3(ctx context.C...
type ABitOfEverythingServiceEcho3Opts (line 377) | type ABitOfEverythingServiceEcho3Opts struct
FILE: examples/internal/clients/abe/api_snake_enum_service.go
type SnakeEnumServiceApiService (line 27) | type SnakeEnumServiceApiService
method SnakeEnumServiceSnakeEnum (line 38) | func (a *SnakeEnumServiceApiService) SnakeEnumServiceSnakeEnum(ctx con...
FILE: examples/internal/clients/abe/client.go
type APIClient (line 43) | type APIClient struct
method callAPI (line 157) | func (c *APIClient) callAPI(request *http.Request) (*http.Response, er...
method ChangeBasePath (line 162) | func (c *APIClient) ChangeBasePath(path string) {
method prepareRequest (line 167) | func (c *APIClient) prepareRequest(
method decode (line 312) | func (c *APIClient) decode(v interface{}, b []byte, contentType string...
type service (line 58) | type service struct
function NewAPIClient (line 64) | func NewAPIClient(cfg *Configuration) *APIClient {
function atoi (line 82) | func atoi(in string) (int, error) {
function selectHeaderContentType (line 87) | func selectHeaderContentType(contentTypes []string) string {
function selectHeaderAccept (line 98) | func selectHeaderAccept(accepts []string) string {
function contains (line 111) | func contains(haystack []string, needle string) bool {
function typeCheckParameter (line 121) | func typeCheckParameter(obj interface{}, expected string, name string) e...
function parameterToString (line 135) | func parameterToString(obj interface{}, collectionFormat string) string {
function addFile (line 328) | func addFile(w *multipart.Writer, fieldName, path string) error {
function reportError (line 345) | func reportError(format string, a ...interface{}) error {
function setBody (line 350) | func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffe...
function detectContentType (line 381) | func detectContentType(body interface{}) string {
type cacheControl (line 402) | type cacheControl
function parseCacheControl (line 404) | func parseCacheControl(headers http.Header) cacheControl {
function CacheExpires (line 423) | func CacheExpires(r *http.Response) time.Time {
function strlen (line 450) | func strlen(s string) int {
type GenericSwaggerError (line 455) | type GenericSwaggerError struct
method Error (line 462) | func (e GenericSwaggerError) Error() string {
method Body (line 467) | func (e GenericSwaggerError) Body() []byte {
method Model (line 472) | func (e GenericSwaggerError) Model() interface{} {
FILE: examples/internal/clients/abe/configuration.go
type contextKey (line 21) | type contextKey
method String (line 23) | func (c contextKey) String() string {
type BasicAuth (line 42) | type BasicAuth struct
type APIKey (line 48) | type APIKey struct
type Configuration (line 53) | type Configuration struct
method AddDefaultHeader (line 71) | func (c *Configuration) AddDefaultHeader(key string, value string) {
function NewConfiguration (line 62) | func NewConfiguration() *Configuration {
FILE: examples/internal/clients/abe/enum_helper.go
method String (line 10) | func (e ExamplepbNumericEnum) String() string {
method UnmarshalJSON (line 16) | func (e ExamplepbNumericEnum) UnmarshalJSON(b []byte) error {
method String (line 21) | func (e MessagePathEnumNestedPathEnum) String() string {
method UnmarshalJSON (line 27) | func (e MessagePathEnumNestedPathEnum) UnmarshalJSON(b []byte) error {
method String (line 32) | func (e PathenumPathEnum) String() string {
method UnmarshalJSON (line 38) | func (e PathenumPathEnum) UnmarshalJSON(b []byte) error {
function unmarshalJSONEnum (line 42) | func unmarshalJSONEnum(b []byte, enumValMap map[string]int32) error {
FILE: examples/internal/clients/abe/model_a_bit_of_everything.go
type ABitOfEverything (line 18) | type ABitOfEverything struct
FILE: examples/internal/clients/abe/model_a_bit_of_everything_1.go
type ABitOfEverything1 (line 18) | type ABitOfEverything1 struct
FILE: examples/internal/clients/abe/model_a_bit_of_everything_2.go
type ABitOfEverything2 (line 18) | type ABitOfEverything2 struct
FILE: examples/internal/clients/abe/model_a_bit_of_everything_3.go
type ABitOfEverything3 (line 18) | type ABitOfEverything3 struct
FILE: examples/internal/clients/abe/model_a_bit_of_everything_4.go
type ABitOfEverything4 (line 18) | type ABitOfEverything4 struct
FILE: examples/internal/clients/abe/model_a_bit_of_everything_5.go
type ABitOfEverything5 (line 16) | type ABitOfEverything5 struct
FILE: examples/internal/clients/abe/model_a_bit_of_everything_6.go
type ABitOfEverything6 (line 16) | type ABitOfEverything6 struct
FILE: examples/internal/clients/abe/model_a_bit_of_everything_7.go
type ABitOfEverything7 (line 16) | type ABitOfEverything7 struct
FILE: examples/internal/clients/abe/model_a_bit_of_everything_8.go
type ABitOfEverything8 (line 16) | type ABitOfEverything8 struct
FILE: examples/internal/clients/abe/model_a_bit_of_everything_nested.go
type ABitOfEverythingNested (line 14) | type ABitOfEverythingNested struct
FILE: examples/internal/clients/abe/model_a_bit_of_everything_service_deep_path_echo_body.go
type ABitOfEverythingServiceDeepPathEchoBody (line 18) | type ABitOfEverythingServiceDeepPathEchoBody struct
FILE: examples/internal/clients/abe/model_a_bit_of_everything_service_deep_path_echo_body_single_nested.go
type ABitOfEverythingServiceDeepPathEchoBodySingleNested (line 14) | type ABitOfEverythingServiceDeepPathEchoBodySingleNested struct
FILE: examples/internal/clients/abe/model_a_bit_of_everything_service_post_with_empty_body_body.go
type ABitOfEverythingServicePostWithEmptyBodyBody (line 13) | type ABitOfEverythingServicePostWithEmptyBodyBody struct
FILE: examples/internal/clients/abe/model_a_bit_of_everything_service_update_body.go
type ABitOfEverythingServiceUpdateBody (line 18) | type ABitOfEverythingServiceUpdateBody struct
FILE: examples/internal/clients/abe/model_a_bit_of_everything_service_update_v2_body.go
type ABitOfEverythingServiceUpdateV2Body (line 13) | type ABitOfEverythingServiceUpdateV2Body struct
FILE: examples/internal/clients/abe/model_book.go
type Book (line 18) | type Book struct
FILE: examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go
type ExamplepbABitOfEverything (line 18) | type ExamplepbABitOfEverything struct
FILE: examples/internal/clients/abe/model_examplepb_a_bit_of_everything_repeated.go
type ExamplepbABitOfEverythingRepeated (line 13) | type ExamplepbABitOfEverythingRepeated struct
FILE: examples/internal/clients/abe/model_examplepb_a_bit_of_everything_service_update_body.go
type ExamplepbABitOfEverythingServiceUpdateBody (line 18) | type ExamplepbABitOfEverythingServiceUpdateBody struct
FILE: examples/internal/clients/abe/model_examplepb_bar.go
type ExamplepbBar (line 13) | type ExamplepbBar struct
FILE: examples/internal/clients/abe/model_examplepb_body.go
type ExamplepbBody (line 13) | type ExamplepbBody struct
FILE: examples/internal/clients/abe/model_examplepb_book.go
type ExamplepbBook (line 18) | type ExamplepbBook struct
FILE: examples/internal/clients/abe/model_examplepb_check_status_response.go
type ExamplepbCheckStatusResponse (line 13) | type ExamplepbCheckStatusResponse struct
FILE: examples/internal/clients/abe/model_examplepb_error_object.go
type ExamplepbErrorObject (line 13) | type ExamplepbErrorObject struct
FILE: examples/internal/clients/abe/model_examplepb_error_response.go
type ExamplepbErrorResponse (line 13) | type ExamplepbErrorResponse struct
FILE: examples/internal/clients/abe/model_examplepb_numeric_enum.go
type ExamplepbNumericEnum (line 13) | type ExamplepbNumericEnum
constant ZERO_ExamplepbNumericEnum (line 17) | ZERO_ExamplepbNumericEnum ExamplepbNumericEnum = "ZERO"
constant ONE_ExamplepbNumericEnum (line 18) | ONE_ExamplepbNumericEnum ExamplepbNumericEnum = "ONE"
FILE: examples/internal/clients/abe/model_examplepb_required_message_type_request.go
type ExamplepbRequiredMessageTypeRequest (line 13) | type ExamplepbRequiredMessageTypeRequest struct
FILE: examples/internal/clients/abe/model_examplepb_snake_case_0_enum.go
type ExamplepbSnakeCase0Enum (line 13) | type ExamplepbSnakeCase0Enum
constant E_ExamplepbSnakeCase0Enum (line 17) | E_ExamplepbSnakeCase0Enum ExamplepbSnakeCase0Enum = "value_e"
constant F_ExamplepbSnakeCase0Enum (line 18) | F_ExamplepbSnakeCase0Enum ExamplepbSnakeCase0Enum = "value_f"
FILE: examples/internal/clients/abe/model_examplepb_snake_case_enum.go
type ExamplepbSnakeCaseEnum (line 13) | type ExamplepbSnakeCaseEnum
constant C_ExamplepbSnakeCaseEnum (line 17) | C_ExamplepbSnakeCaseEnum ExamplepbSnakeCaseEnum = "value_c"
constant D_ExamplepbSnakeCaseEnum (line 18) | D_ExamplepbSnakeCaseEnum ExamplepbSnakeCaseEnum = "value_d"
FILE: examples/internal/clients/abe/model_examplepb_snake_enum_response.go
type ExamplepbSnakeEnumResponse (line 13) | type ExamplepbSnakeEnumResponse struct
FILE: examples/internal/clients/abe/model_google_rpc_status.go
type GoogleRpcStatus (line 14) | type GoogleRpcStatus struct
FILE: examples/internal/clients/abe/model_message_path_enum_nested_path_enum.go
type MessagePathEnumNestedPathEnum (line 13) | type MessagePathEnumNestedPathEnum
constant GHI_MessagePathEnumNestedPathEnum (line 17) | GHI_MessagePathEnumNestedPathEnum MessagePathEnumNestedPathEnum = "GHI"
constant JKL_MessagePathEnumNestedPathEnum (line 18) | JKL_MessagePathEnumNestedPathEnum MessagePathEnumNestedPathEnum = "JKL"
FILE: examples/internal/clients/abe/model_nested_deep_enum.go
type NestedDeepEnum (line 13) | type NestedDeepEnum
constant FALSE_NestedDeepEnum (line 17) | FALSE_NestedDeepEnum NestedDeepEnum = "FALSE"
constant TRUE_NestedDeepEnum (line 18) | TRUE_NestedDeepEnum NestedDeepEnum = "TRUE"
FILE: examples/internal/clients/abe/model_oneofenum_example_enum.go
type OneofenumExampleEnum (line 13) | type OneofenumExampleEnum
constant UNSPECIFIED_OneofenumExampleEnum (line 17) | UNSPECIFIED_OneofenumExampleEnum OneofenumExampleEnum = "EXAMPLE_ENUM_UN...
constant FIRST_OneofenumExampleEnum (line 18) | FIRST_OneofenumExampleEnum OneofenumExampleEnum = "EXAMPLE_ENUM_FIRST"
FILE: examples/internal/clients/abe/model_pathenum_path_enum.go
type PathenumPathEnum (line 13) | type PathenumPathEnum
constant ABC_PathenumPathEnum (line 17) | ABC_PathenumPathEnum PathenumPathEnum = "ABC"
constant DEF_PathenumPathEnum (line 18) | DEF_PathenumPathEnum PathenumPathEnum = "DEF"
FILE: examples/internal/clients/abe/model_pathenum_snake_case_for_import.go
type PathenumSnakeCaseForImport (line 13) | type PathenumSnakeCaseForImport
constant X_PathenumSnakeCaseForImport (line 17) | X_PathenumSnakeCaseForImport PathenumSnakeCaseForImport = "value_x"
constant Y_PathenumSnakeCaseForImport (line 18) | Y_PathenumSnakeCaseForImport PathenumSnakeCaseForImport = "value_y"
FILE: examples/internal/clients/abe/model_proto_examplepb_foo.go
type ProtoExamplepbFoo (line 13) | type ProtoExamplepbFoo struct
FILE: examples/internal/clients/abe/model_protobuf_any.go
type ProtobufAny (line 14) | type ProtobufAny struct
FILE: examples/internal/clients/abe/model_sub_string_message.go
type SubStringMessage (line 13) | type SubStringMessage struct
FILE: examples/internal/clients/abe/model_the_book_to_update_.go
type TheBookToUpdate_ (line 18) | type TheBookToUpdate_ struct
FILE: examples/internal/clients/abe/model_the_book_to_update__1.go
type TheBookToUpdate1 (line 16) | type TheBookToUpdate1 struct
FILE: examples/internal/clients/abe/model_the_book_to_update_the_books_name_field_is_used_to_identify_the_book_to_be_updated_format_publisherspublisherbooksbook.go
type TheBookToUpdateTheBooksNameFieldIsUsedToIdentifyTheBookToBeUpdatedFormatPublisherspublisherbooksbook (line 17) | type TheBookToUpdateTheBooksNameFieldIsUsedToIdentifyTheBookToBeUpdatedF...
FILE: examples/internal/clients/abe/model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask.go
type UpdateV2RequestRequestForUpdateIncludesTheMessageAndTheUpdateMask (line 13) | type UpdateV2RequestRequestForUpdateIncludesTheMessageAndTheUpdateMask s...
FILE: examples/internal/clients/abe/model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask_1.go
type UpdateV2RequestRequestForUpdateIncludesTheMessageAndTheUpdateMask1 (line 12) | type UpdateV2RequestRequestForUpdateIncludesTheMessageAndTheUpdateMask1 ...
FILE: examples/internal/clients/abe/model_v1exampledeep_pathsingle_nested_name_single_nested.go
type V1exampledeepPathsingleNestedNameSingleNested (line 14) | type V1exampledeepPathsingleNestedNameSingleNested struct
FILE: examples/internal/clients/abe/response.go
type APIResponse (line 17) | type APIResponse struct
function NewAPIResponse (line 34) | func NewAPIResponse(r *http.Response) *APIResponse {
function NewAPIResponseWithError (line 40) | func NewAPIResponseWithError(errorMessage string) *APIResponse {
FILE: examples/internal/clients/echo/api_echo_service.go
type EchoServiceApiService (line 27) | type EchoServiceApiService
method EchoServiceEcho (line 64) | func (a *EchoServiceApiService) EchoServiceEcho(ctx context.Context, i...
method EchoServiceEcho2 (line 223) | func (a *EchoServiceApiService) EchoServiceEcho2(ctx context.Context, ...
method EchoServiceEcho3 (line 379) | func (a *EchoServiceApiService) EchoServiceEcho3(ctx context.Context, ...
method EchoServiceEcho4 (line 531) | func (a *EchoServiceApiService) EchoServiceEcho4(ctx context.Context, ...
method EchoServiceEcho5 (line 682) | func (a *EchoServiceApiService) EchoServiceEcho5(ctx context.Context, ...
method EchoServiceEcho6 (line 839) | func (a *EchoServiceApiService) EchoServiceEcho6(ctx context.Context, ...
method EchoServiceEcho7 (line 999) | func (a *EchoServiceApiService) EchoServiceEcho7(ctx context.Context, ...
method EchoServiceEchoBody (line 1131) | func (a *EchoServiceApiService) EchoServiceEchoBody(ctx context.Contex...
method EchoServiceEchoBody2 (line 1253) | func (a *EchoServiceApiService) EchoServiceEchoBody2(ctx context.Conte...
method EchoServiceEchoDelete (line 1406) | func (a *EchoServiceApiService) EchoServiceEchoDelete(ctx context.Cont...
method EchoServiceEchoPatch (line 1540) | func (a *EchoServiceApiService) EchoServiceEchoPatch(ctx context.Conte...
method EchoServiceEchoStatus (line 1640) | func (a *EchoServiceApiService) EchoServiceEchoStatus(ctx context.Cont...
method EchoServiceEchoUnauthorized (line 1768) | func (a *EchoServiceApiService) EchoServiceEchoUnauthorized(ctx contex...
type EchoServiceEchoOpts (line 50) | type EchoServiceEchoOpts struct
type EchoServiceEcho2Opts (line 210) | type EchoServiceEcho2Opts struct
type EchoServiceEcho3Opts (line 367) | type EchoServiceEcho3Opts struct
type EchoServiceEcho4Opts (line 520) | type EchoServiceEcho4Opts struct
type EchoServiceEcho5Opts (line 669) | type EchoServiceEcho5Opts struct
type EchoServiceEcho6Opts (line 825) | type EchoServiceEcho6Opts struct
type EchoServiceEcho7Opts (line 985) | type EchoServiceEcho7Opts struct
type EchoServiceEchoBody2Opts (line 1242) | type EchoServiceEchoBody2Opts struct
type EchoServiceEchoDeleteOpts (line 1391) | type EchoServiceEchoDeleteOpts struct
type EchoServiceEchoUnauthorizedOpts (line 1753) | type EchoServiceEchoUnauthorizedOpts struct
FILE: examples/internal/clients/echo/client.go
type APIClient (line 42) | type APIClient struct
method callAPI (line 147) | func (c *APIClient) callAPI(request *http.Request) (*http.Response, er...
method ChangeBasePath (line 152) | func (c *APIClient) ChangeBasePath(path string) {
method prepareRequest (line 157) | func (c *APIClient) prepareRequest(
method decode (line 302) | func (c *APIClient) decode(v interface{}, b []byte, contentType string...
type service (line 51) | type service struct
function NewAPIClient (line 57) | func NewAPIClient(cfg *Configuration) *APIClient {
function atoi (line 72) | func atoi(in string) (int, error) {
function selectHeaderContentType (line 77) | func selectHeaderContentType(contentTypes []string) string {
function selectHeaderAccept (line 88) | func selectHeaderAccept(accepts []string) string {
function contains (line 101) | func contains(haystack []string, needle string) bool {
function typeCheckParameter (line 111) | func typeCheckParameter(obj interface{}, expected string, name string) e...
function parameterToString (line 125) | func parameterToString(obj interface{}, collectionFormat string) string {
function addFile (line 318) | func addFile(w *multipart.Writer, fieldName, path string) error {
function reportError (line 335) | func reportError(format string, a ...interface{}) error {
function setBody (line 340) | func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffe...
function detectContentType (line 371) | func detectContentType(body interface{}) string {
type cacheControl (line 392) | type cacheControl
function parseCacheControl (line 394) | func parseCacheControl(headers http.Header) cacheControl {
function CacheExpires (line 413) | func CacheExpires(r *http.Response) time.Time {
function strlen (line 440) | func strlen(s string) int {
type GenericSwaggerError (line 445) | type GenericSwaggerError struct
method Error (line 452) | func (e GenericSwaggerError) Error() string {
method Body (line 457) | func (e GenericSwaggerError) Body() []byte {
method Model (line 462) | func (e GenericSwaggerError) Model() interface{} {
FILE: examples/internal/clients/echo/configuration.go
type contextKey (line 20) | type contextKey
method String (line 22) | func (c contextKey) String() string {
type BasicAuth (line 41) | type BasicAuth struct
type APIKey (line 47) | type APIKey struct
type Configuration (line 52) | type Configuration struct
method AddDefaultHeader (line 70) | func (c *Configuration) AddDefaultHeader(key string, value string) {
function NewConfiguration (line 61) | func NewConfiguration() *Configuration {
FILE: examples/internal/clients/echo/model_examplepb_dynamic_message.go
type ExamplepbDynamicMessage (line 13) | type ExamplepbDynamicMessage struct
FILE: examples/internal/clients/echo/model_examplepb_dynamic_message_update.go
type ExamplepbDynamicMessageUpdate (line 12) | type ExamplepbDynamicMessageUpdate struct
FILE: examples/internal/clients/echo/model_examplepb_embedded.go
type ExamplepbEmbedded (line 13) | type ExamplepbEmbedded struct
FILE: examples/internal/clients/echo/model_examplepb_nested_message.go
type ExamplepbNestedMessage (line 12) | type ExamplepbNestedMessage struct
FILE: examples/internal/clients/echo/model_examplepb_simple_message.go
type ExamplepbSimpleMessage (line 13) | type ExamplepbSimpleMessage struct
FILE: examples/internal/clients/echo/model_examplepb_status_check_request.go
type ExamplepbStatusCheckRequest (line 13) | type ExamplepbStatusCheckRequest struct
FILE: examples/internal/clients/echo/model_examplepb_status_check_response.go
type ExamplepbStatusCheckResponse (line 12) | type ExamplepbStatusCheckResponse struct
FILE: examples/internal/clients/echo/model_google_rpc_status.go
type GoogleRpcStatus (line 13) | type GoogleRpcStatus struct
FILE: examples/internal/clients/echo/model_proto_sub2_status.go
type ProtoSub2Status (line 12) | type ProtoSub2Status struct
FILE: examples/internal/clients/echo/model_proto_sub_status.go
type ProtoSubStatus (line 12) | type ProtoSubStatus struct
FILE: examples/internal/clients/echo/model_protobuf_any.go
type ProtobufAny (line 13) | type ProtobufAny struct
FILE: examples/internal/clients/echo/model_protobuf_null_value.go
type ProtobufNullValue (line 12) | type ProtobufNullValue
constant NULL_VALUE_ProtobufNullValue (line 16) | NULL_VALUE_ProtobufNullValue ProtobufNullValue = "NULL_VALUE"
FILE: examples/internal/clients/echo/response.go
type APIResponse (line 16) | type APIResponse struct
function NewAPIResponse (line 33) | func NewAPIResponse(r *http.Response) *APIResponse {
function NewAPIResponseWithError (line 39) | func NewAPIResponseWithError(errorMessage string) *APIResponse {
FILE: examples/internal/clients/generateunboundmethods/api_generate_unbound_methods_echo_service.go
type GenerateUnboundMethodsEchoServiceApiService (line 25) | type GenerateUnboundMethodsEchoServiceApiService
method GenerateUnboundMethodsEchoServiceEcho (line 35) | func (a *GenerateUnboundMethodsEchoServiceApiService) GenerateUnboundM...
method GenerateUnboundMethodsEchoServiceEchoBody (line 135) | func (a *GenerateUnboundMethodsEchoServiceApiService) GenerateUnboundM...
method GenerateUnboundMethodsEchoServiceEchoDelete (line 235) | func (a *GenerateUnboundMethodsEchoServiceApiService) GenerateUnboundM...
FILE: examples/internal/clients/generateunboundmethods/client.go
type APIClient (line 42) | type APIClient struct
method callAPI (line 147) | func (c *APIClient) callAPI(request *http.Request) (*http.Response, er...
method ChangeBasePath (line 152) | func (c *APIClient) ChangeBasePath(path string) {
method prepareRequest (line 157) | func (c *APIClient) prepareRequest(
method decode (line 302) | func (c *APIClient) decode(v interface{}, b []byte, contentType string...
type service (line 51) | type service struct
function NewAPIClient (line 57) | func NewAPIClient(cfg *Configuration) *APIClient {
function atoi (line 72) | func atoi(in string) (int, error) {
function selectHeaderContentType (line 77) | func selectHeaderContentType(contentTypes []string) string {
function selectHeaderAccept (line 88) | func selectHeaderAccept(accepts []string) string {
function contains (line 101) | func contains(haystack []string, needle string) bool {
function typeCheckParameter (line 111) | func typeCheckParameter(obj interface{}, expected string, name string) e...
function parameterToString (line 125) | func parameterToString(obj interface{}, collectionFormat string) string {
function addFile (line 318) | func addFile(w *multipart.Writer, fieldName, path string) error {
function reportError (line 335) | func reportError(format string, a ...interface{}) error {
function setBody (line 340) | func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffe...
function detectContentType (line 371) | func detectContentType(body interface{}) string {
type cacheControl (line 392) | type cacheControl
function parseCacheControl (line 394) | func parseCacheControl(headers http.Header) cacheControl {
function CacheExpires (line 413) | func CacheExpires(r *http.Response) time.Time {
function strlen (line 440) | func strlen(s string) int {
type GenericSwaggerError (line 445) | type GenericSwaggerError struct
method Error (line 452) | func (e GenericSwaggerError) Error() string {
method Body (line 457) | func (e GenericSwaggerError) Body() []byte {
method Model (line 462) | func (e GenericSwaggerError) Model() interface{} {
FILE: examples/internal/clients/generateunboundmethods/configuration.go
type contextKey (line 20) | type contextKey
method String (line 22) | func (c contextKey) String() string {
type BasicAuth (line 41) | type BasicAuth struct
type APIKey (line 47) | type APIKey struct
type Configuration (line 52) | type Configuration struct
method AddDefaultHeader (line 70) | func (c *Configuration) AddDefaultHeader(key string, value string) {
function NewConfiguration (line 61) | func NewConfiguration() *Configuration {
FILE: examples/internal/clients/generateunboundmethods/model_examplepb_generate_unbound_methods_simple_message.go
type ExamplepbGenerateUnboundMethodsSimpleMessage (line 13) | type ExamplepbGenerateUnboundMethodsSimpleMessage struct
FILE: examples/internal/clients/generateunboundmethods/model_protobuf_any.go
type ProtobufAny (line 12) | type ProtobufAny struct
FILE: examples/internal/clients/generateunboundmethods/model_rpc_status.go
type RpcStatus (line 12) | type RpcStatus struct
FILE: examples/internal/clients/generateunboundmethods/model_runtime_error.go
type RuntimeError (line 12) | type RuntimeError struct
FILE: examples/internal/clients/generateunboundmethods/response.go
type APIResponse (line 16) | type APIResponse struct
function NewAPIResponse (line 33) | func NewAPIResponse(r *http.Response) *APIResponse {
function NewAPIResponseWithError (line 39) | func NewAPIResponseWithError(errorMessage string) *APIResponse {
FILE: examples/internal/clients/responsebody/api_response_body_service.go
type ResponseBodyServiceApiService (line 26) | type ResponseBodyServiceApiService
method ResponseBodyServiceGetResponseBody (line 35) | func (a *ResponseBodyServiceApiService) ResponseBodyServiceGetResponse...
method ResponseBodyServiceGetResponseBodySameName (line 134) | func (a *ResponseBodyServiceApiService) ResponseBodyServiceGetResponse...
method ResponseBodyServiceGetResponseBodyStream (line 233) | func (a *ResponseBodyServiceApiService) ResponseBodyServiceGetResponse...
method ResponseBodyServiceListResponseBodies (line 332) | func (a *ResponseBodyServiceApiService) ResponseBodyServiceListRespons...
method ResponseBodyServiceListResponseStrings (line 431) | func (a *ResponseBodyServiceApiService) ResponseBodyServiceListRespons...
FILE: examples/internal/clients/responsebody/client.go
type APIClient (line 42) | type APIClient struct
method callAPI (line 147) | func (c *APIClient) callAPI(request *http.Request) (*http.Response, er...
method ChangeBasePath (line 152) | func (c *APIClient) ChangeBasePath(path string) {
method prepareRequest (line 157) | func (c *APIClient) prepareRequest(
method decode (line 302) | func (c *APIClient) decode(v interface{}, b []byte, contentType string...
type service (line 51) | type service struct
function NewAPIClient (line 57) | func NewAPIClient(cfg *Configuration) *APIClient {
function atoi (line 72) | func atoi(in string) (int, error) {
function selectHeaderContentType (line 77) | func selectHeaderContentType(contentTypes []string) string {
function selectHeaderAccept (line 88) | func selectHeaderAccept(accepts []string) string {
function contains (line 101) | func contains(haystack []string, needle string) bool {
function typeCheckParameter (line 111) | func typeCheckParameter(obj interface{}, expected string, name string) e...
function parameterToString (line 125) | func parameterToString(obj interface{}, collectionFormat string) string {
function addFile (line 318) | func addFile(w *multipart.Writer, fieldName, path string) error {
function reportError (line 335) | func reportError(format string, a ...interface{}) error {
function setBody (line 340) | func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffe...
function detectContentType (line 371) | func detectContentType(body interface{}) string {
type cacheControl (line 392) | type cacheControl
function parseCacheControl (line 394) | func parseCacheControl(headers http.Header) cacheControl {
function CacheExpires (line 413) | func CacheExpires(r *http.Response) time.Time {
function strlen (line 440) | func strlen(s string) int {
type GenericSwaggerError (line 445) | type GenericSwaggerError struct
method Error (line 452) | func (e GenericSwaggerError) Error() string {
method Body (line 457) | func (e GenericSwaggerError) Body() []byte {
method Model (line 462) | func (e GenericSwaggerError) Model() interface{} {
FILE: examples/internal/clients/responsebody/configuration.go
type contextKey (line 20) | type contextKey
method String (line 22) | func (c contextKey) String() string {
type BasicAuth (line 41) | type BasicAuth struct
type APIKey (line 47) | type APIKey struct
type Configuration (line 52) | type Configuration struct
method AddDefaultHeader (line 70) | func (c *Configuration) AddDefaultHeader(key string, value string) {
function NewConfiguration (line 61) | func NewConfiguration() *Configuration {
FILE: examples/internal/clients/responsebody/model_examplepb_repeated_response_body_out.go
type ExamplepbRepeatedResponseBodyOut (line 12) | type ExamplepbRepeatedResponseBodyOut struct
FILE: examples/internal/clients/responsebody/model_examplepb_repeated_response_body_out_response.go
type ExamplepbRepeatedResponseBodyOutResponse (line 12) | type ExamplepbRepeatedResponseBodyOutResponse struct
FILE: examples/internal/clients/responsebody/model_examplepb_repeated_response_strings.go
type ExamplepbRepeatedResponseStrings (line 12) | type ExamplepbRepeatedResponseStrings struct
FILE: examples/internal/clients/responsebody/model_examplepb_response_body_out.go
type ExamplepbResponseBodyOut (line 12) | type ExamplepbResponseBodyOut struct
FILE: examples/internal/clients/responsebody/model_examplepb_response_body_out_response.go
type ExamplepbResponseBodyOutResponse (line 12) | type ExamplepbResponseBodyOutResponse struct
FILE: examples/internal/clients/responsebody/model_examplepb_response_body_value.go
type ExamplepbResponseBodyValue (line 12) | type ExamplepbResponseBodyValue struct
FILE: examples/internal/clients/responsebody/model_google_rpc_status.go
type GoogleRpcStatus (line 13) | type GoogleRpcStatus struct
FILE: examples/internal/clients/responsebody/model_protobuf_any.go
type ProtobufAny (line 13) | type ProtobufAny struct
FILE: examples/internal/clients/responsebody/model_response_response_type.go
type ResponseResponseType (line 12) | type ResponseResponseType
constant UNKNOWN_ResponseResponseType (line 16) | UNKNOWN_ResponseResponseType ResponseResponseType = "UNKNOWN"
constant A_ResponseResponseType (line 17) | A_ResponseResponseType ResponseResponseType = "A"
constant B_ResponseResponseType (line 18) | B_ResponseResponseType ResponseResponseType = "B"
FILE: examples/internal/clients/responsebody/model_stream_result_of_examplepb_response_body_out.go
type StreamResultOfExamplepbResponseBodyOut (line 12) | type StreamResultOfExamplepbResponseBodyOut struct
FILE: examples/internal/clients/responsebody/response.go
type APIResponse (line 16) | type APIResponse struct
function NewAPIResponse (line 33) | func NewAPIResponse(r *http.Response) *APIResponse {
function NewAPIResponseWithError (line 39) | func NewAPIResponseWithError(errorMessage string) *APIResponse {
FILE: examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go
type UnannotatedEchoServiceApiService (line 28) | type UnannotatedEchoServiceApiService
method UnannotatedEchoServiceEcho (line 66) | func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho(...
method UnannotatedEchoServiceEcho2 (line 274) | func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho2...
method UnannotatedEchoServiceEchoBody (line 453) | func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEchoB...
method UnannotatedEchoServiceEchoDelete (line 617) | func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEchoD...
method UnannotatedEchoServiceEchoNested (line 787) | func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEchoN...
type UnannotatedEchoServiceEchoOpts (line 52) | type UnannotatedEchoServiceEchoOpts struct
type UnannotatedEchoServiceEcho2Opts (line 260) | type UnannotatedEchoServiceEcho2Opts struct
type UnannotatedEchoServiceEchoDeleteOpts (line 602) | type UnannotatedEchoServiceEchoDeleteOpts struct
FILE: examples/internal/clients/unannotatedecho/client.go
type APIClient (line 43) | type APIClient struct
method callAPI (line 148) | func (c *APIClient) callAPI(request *http.Request) (*http.Response, er...
method ChangeBasePath (line 153) | func (c *APIClient) ChangeBasePath(path string) {
method prepareRequest (line 158) | func (c *APIClient) prepareRequest(
method decode (line 303) | func (c *APIClient) decode(v interface{}, b []byte, contentType string...
type service (line 52) | type service struct
function NewAPIClient (line 58) | func NewAPIClient(cfg *Configuration) *APIClient {
function atoi (line 73) | func atoi(in string) (int, error) {
function selectHeaderContentType (line 78) | func selectHeaderContentType(contentTypes []string) string {
function selectHeaderAccept (line 89) | func selectHeaderAccept(accepts []string) string {
function contains (line 102) | func contains(haystack []string, needle string) bool {
function typeCheckParameter (line 112) | func typeCheckParameter(obj interface{}, expected string, name string) e...
function parameterToString (line 126) | func parameterToString(obj interface{}, collectionFormat string) string {
function addFile (line 319) | func addFile(w *multipart.Writer, fieldName, path string) error {
function reportError (line 336) | func reportError(format string, a ...interface{}) error {
function setBody (line 341) | func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffe...
function detectContentType (line 372) | func detectContentType(body interface{}) string {
type cacheControl (line 393) | type cacheControl
function parseCacheControl (line 395) | func parseCacheControl(headers http.Header) cacheControl {
function CacheExpires (line 414) | func CacheExpires(r *http.Response) time.Time {
function strlen (line 441) | func strlen(s string) int {
type GenericSwaggerError (line 446) | type GenericSwaggerError struct
method Error (line 453) | func (e GenericSwaggerError) Error() string {
method Body (line 458) | func (e GenericSwaggerError) Body() []byte {
method Model (line 463) | func (e GenericSwaggerError) Model() interface{} {
FILE: examples/internal/clients/unannotatedecho/configuration.go
type contextKey (line 21) | type contextKey
method String (line 23) | func (c contextKey) String() string {
type BasicAuth (line 42) | type BasicAuth struct
type APIKey (line 48) | type APIKey struct
type Configuration (line 53) | type Configuration struct
method AddDefaultHeader (line 71) | func (c *Configuration) AddDefaultHeader(key string, value string) {
function NewConfiguration (line 62) | func NewConfiguration() *Configuration {
FILE: examples/internal/clients/unannotatedecho/model_examplepb_numeric_enum.go
type ExamplepbNumericEnum (line 13) | type ExamplepbNumericEnum
constant ZERO_ExamplepbNumericEnum (line 17) | ZERO_ExamplepbNumericEnum ExamplepbNumericEnum = "ZERO"
constant ONE_ExamplepbNumericEnum (line 18) | ONE_ExamplepbNumericEnum ExamplepbNumericEnum = "ONE"
FILE: examples/internal/clients/unannotatedecho/model_examplepb_unannotated_embedded.go
type ExamplepbUnannotatedEmbedded (line 14) | type ExamplepbUnannotatedEmbedded struct
FILE: examples/internal/clients/unannotatedecho/model_examplepb_unannotated_nested_message.go
type ExamplepbUnannotatedNestedMessage (line 13) | type ExamplepbUnannotatedNestedMessage struct
FILE: examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go
type ExamplepbUnannotatedSimpleMessage (line 14) | type ExamplepbUnannotatedSimpleMessage struct
FILE: examples/internal/clients/unannotatedecho/model_protobuf_any.go
type ProtobufAny (line 13) | type ProtobufAny struct
FILE: examples/internal/clients/unannotatedecho/model_rpc_status.go
type RpcStatus (line 13) | type RpcStatus struct
FILE: examples/internal/clients/unannotatedecho/response.go
type APIResponse (line 17) | type APIResponse struct
function NewAPIResponse (line 34) | func NewAPIResponse(r *http.Response) *APIResponse {
function NewAPIResponseWithError (line 40) | func NewAPIResponseWithError(errorMessage string) *APIResponse {
FILE: examples/internal/cmd/example-gateway-server/main.go
function main (line 21) | func main() {
FILE: examples/internal/cmd/example-grpc-server/main.go
function main (line 20) | func main() {
FILE: examples/internal/gateway/gateway.go
function newGateway (line 19) | func newGateway(ctx context.Context, conn *grpc.ClientConn, opts []gwrun...
function dial (line 39) | func dial(network, addr string) (*grpc.ClientConn, error) {
function dialTCP (line 52) | func dialTCP(addr string) (*grpc.ClientConn, error) {
function dialUnix (line 58) | func dialUnix(addr string) (*grpc.ClientConn, error) {
FILE: examples/internal/gateway/handlers.go
function openAPIServer (line 18) | func openAPIServer(dir string) http.HandlerFunc {
function allowCORS (line 35) | func allowCORS(h http.Handler) http.Handler {
function preflightHandler (line 51) | func preflightHandler(w http.ResponseWriter, r *http.Request) {
function healthzServer (line 60) | func healthzServer(conn *grpc.ClientConn) http.HandlerFunc {
type logResponseWriter (line 75) | type logResponseWriter struct
method WriteHeader (line 80) | func (rsp *logResponseWriter) WriteHeader(code int) {
method Unwrap (line 87) | func (rsp *logResponseWriter) Unwrap() http.ResponseWriter {
function newLogResponseWriter (line 91) | func newLogResponseWriter(w http.ResponseWriter) *logResponseWriter {
function logRequestBody (line 97) | func logRequestBody(h http.Handler) http.Handler {
FILE: examples/internal/gateway/main.go
type Endpoint (line 12) | type Endpoint struct
type Options (line 17) | type Options struct
function Run (line 34) | func Run(ctx context.Context, opts Options) error {
FILE: examples/internal/helloworld/helloworld.pb.go
constant _ (line 20) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 22) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type HelloRequest (line 25) | type HelloRequest struct
method Reset (line 42) | func (x *HelloRequest) Reset() {
method String (line 49) | func (x *HelloRequest) String() string {
method ProtoMessage (line 53) | func (*HelloRequest) ProtoMessage() {}
method ProtoReflect (line 55) | func (x *HelloRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 68) | func (*HelloRequest) Descriptor() ([]byte, []int) {
method GetName (line 72) | func (x *HelloRequest) GetName() string {
method GetStrVal (line 79) | func (x *HelloRequest) GetStrVal() *wrapperspb.StringValue {
method GetFloatVal (line 86) | func (x *HelloRequest) GetFloatVal() *wrapperspb.FloatValue {
method GetDoubleVal (line 93) | func (x *HelloRequest) GetDoubleVal() *wrapperspb.DoubleValue {
method GetBoolVal (line 100) | func (x *HelloRequest) GetBoolVal() *wrapperspb.BoolValue {
method GetBytesVal (line 107) | func (x *HelloRequest) GetBytesVal() *wrapperspb.BytesValue {
method GetInt32Val (line 114) | func (x *HelloRequest) GetInt32Val() *wrapperspb.Int32Value {
method GetUint32Val (line 121) | func (x *HelloRequest) GetUint32Val() *wrapperspb.UInt32Value {
method GetInt64Val (line 128) | func (x *HelloRequest) GetInt64Val() *wrapperspb.Int64Value {
method GetUint64Val (line 135) | func (x *HelloRequest) GetUint64Val() *wrapperspb.UInt64Value {
type HelloReply (line 142) | type HelloReply struct
method Reset (line 150) | func (x *HelloReply) Reset() {
method String (line 157) | func (x *HelloReply) String() string {
method ProtoMessage (line 161) | func (*HelloReply) ProtoMessage() {}
method ProtoReflect (line 163) | func (x *HelloReply) ProtoReflect() protoreflect.Message {
method Descriptor (line 176) | func (*HelloReply) Descriptor() ([]byte, []int) {
method GetMessage (line 180) | func (x *HelloReply) GetMessage() string {
function file_examples_internal_helloworld_helloworld_proto_rawDescGZIP (line 275) | func file_examples_internal_helloworld_helloworld_proto_rawDescGZIP() []...
function init (line 315) | func init() { file_examples_internal_helloworld_helloworld_proto_init() }
function file_examples_internal_helloworld_helloworld_proto_init (line 316) | func file_examples_internal_helloworld_helloworld_proto_init() {
FILE: examples/internal/helloworld/helloworld.pb.gw.go
function request_Greeter_SayHello_0 (line 40) | func request_Greeter_SayHello_0(ctx context.Context, marshaler runtime.M...
function local_request_Greeter_SayHello_0 (line 67) | func local_request_Greeter_SayHello_0(ctx context.Context, marshaler run...
function request_Greeter_SayHello_1 (line 93) | func request_Greeter_SayHello_1(ctx context.Context, marshaler runtime.M...
function local_request_Greeter_SayHello_1 (line 120) | func local_request_Greeter_SayHello_1(ctx context.Context, marshaler run...
function request_Greeter_SayHello_2 (line 146) | func request_Greeter_SayHello_2(ctx context.Context, marshaler runtime.M...
function local_request_Greeter_SayHello_2 (line 173) | func local_request_Greeter_SayHello_2(ctx context.Context, marshaler run...
function request_Greeter_SayHello_3 (line 199) | func request_Greeter_SayHello_3(ctx context.Context, marshaler runtime.M...
function local_request_Greeter_SayHello_3 (line 226) | func local_request_Greeter_SayHello_3(ctx context.Context, marshaler run...
function request_Greeter_SayHello_4 (line 252) | func request_Greeter_SayHello_4(ctx context.Context, marshaler runtime.M...
function local_request_Greeter_SayHello_4 (line 279) | func local_request_Greeter_SayHello_4(ctx context.Context, marshaler run...
function request_Greeter_SayHello_5 (line 305) | func request_Greeter_SayHello_5(ctx context.Context, marshaler runtime.M...
function local_request_Greeter_SayHello_5 (line 332) | func local_request_Greeter_SayHello_5(ctx context.Context, marshaler run...
function request_Greeter_SayHello_6 (line 358) | func request_Greeter_SayHello_6(ctx context.Context, marshaler runtime.M...
function local_request_Greeter_SayHello_6 (line 385) | func local_request_Greeter_SayHello_6(ctx context.Context, marshaler run...
function request_Greeter_SayHello_7 (line 411) | func request_Greeter_SayHello_7(ctx context.Context, marshaler runtime.M...
function local_request_Greeter_SayHello_7 (line 438) | func local_request_Greeter_SayHello_7(ctx context.Context, marshaler run...
function request_Greeter_SayHello_8 (line 464) | func request_Greeter_SayHello_8(ctx context.Context, marshaler runtime.M...
function local_request_Greeter_SayHello_8 (line 491) | func local_request_Greeter_SayHello_8(ctx context.Context, marshaler run...
function request_Greeter_SayHello_9 (line 517) | func request_Greeter_SayHello_9(ctx context.Context, marshaler runtime.M...
function local_request_Greeter_SayHello_9 (line 544) | func local_request_Greeter_SayHello_9(ctx context.Context, marshaler run...
function RegisterGreeterHandlerServer (line 573) | func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.Serv...
function RegisterGreeterHandlerFromEndpoint (line 780) | func RegisterGreeterHandlerFromEndpoint(ctx context.Context, mux *runtim...
function RegisterGreeterHandler (line 804) | func RegisterGreeterHandler(ctx context.Context, mux *runtime.ServeMux, ...
function RegisterGreeterHandlerClient (line 813) | func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.Serv...
FILE: examples/internal/helloworld/helloworld_grpc.pb.go
constant _ (line 19) | _ = grpc.SupportPackageIsVersion9
constant Greeter_SayHello_FullMethodName (line 22) | Greeter_SayHello_FullMethodName = "/grpc.gateway.examples.internal.hello...
type GreeterClient (line 28) | type GreeterClient interface
type greeterClient (line 32) | type greeterClient struct
method SayHello (line 40) | func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest...
function NewGreeterClient (line 36) | func NewGreeterClient(cc grpc.ClientConnInterface) GreeterClient {
type GreeterServer (line 53) | type GreeterServer interface
type UnimplementedGreeterServer (line 62) | type UnimplementedGreeterServer struct
method SayHello (line 64) | func (UnimplementedGreeterServer) SayHello(context.Context, *HelloRequ...
method testEmbeddedByValue (line 67) | func (UnimplementedGreeterServer) testEmbeddedByValue() {}
type UnsafeGreeterServer (line 72) | type UnsafeGreeterServer interface
function RegisterGreeterServer (line 76) | func RegisterGreeterServer(s grpc.ServiceRegistrar, srv GreeterServer) {
function _Greeter_SayHello_Handler (line 87) | func _Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec...
FILE: examples/internal/integration/client_test.go
function TestEchoClient (line 16) | func TestEchoClient(t *testing.T) {
function TestEchoBodyClient (line 35) | func TestEchoBodyClient(t *testing.T) {
function TestEchoBody2Client (line 55) | func TestEchoBody2Client(t *testing.T) {
function TestAbitOfEverythingClient (line 75) | func TestAbitOfEverythingClient(t *testing.T) {
function testABEClientCreate (line 89) | func testABEClientCreate(t *testing.T, cl *abe.APIClient) {
function TestUnannotatedEchoClient (line 214) | func TestUnannotatedEchoClient(t *testing.T) {
function TestUnannotatedEchoBodyClient (line 234) | func TestUnannotatedEchoBodyClient(t *testing.T) {
FILE: examples/internal/integration/integration_test.go
function TestEcho (line 38) | func TestEcho(t *testing.T) {
function TestEchoUnauthorized (line 64) | func TestEchoUnauthorized(t *testing.T) {
function TestEchoPatch (line 96) | func TestEchoPatch(t *testing.T) {
function TestForwardResponseOption (line 159) | func TestForwardResponseOption(t *testing.T) {
function TestForwardResponseOptionHTTPPathPattern (line 191) | func TestForwardResponseOptionHTTPPathPattern(t *testing.T) {
function testEcho (line 224) | func testEcho(t *testing.T, port int, apiPrefix string, contentType stri...
function testEchoOneof (line 257) | func testEchoOneof(t *testing.T, port int, apiPrefix string, contentType...
function testEchoOneof1 (line 290) | func testEchoOneof1(t *testing.T, port int, apiPrefix string, contentTyp...
function testEchoOneof2 (line 323) | func testEchoOneof2(t *testing.T, port int, apiPrefix string, contentTyp...
function testEchoPathParamOverwrite (line 356) | func testEchoPathParamOverwrite(t *testing.T, port int) {
function testEchoNested (line 385) | func testEchoNested(t *testing.T, port int) {
function testEchoNestedOverride (line 413) | func testEchoNestedOverride(t *testing.T, port int) {
function testEchoBody (line 441) | func testEchoBody(t *testing.T, port int, apiPrefix string, useTrailers ...
function TestABE (line 507) | func TestABE(t *testing.T) {
function testABECreate (line 533) | func testABECreate(t *testing.T, port int) {
function testABECreateBody (line 588) | func testABECreateBody(t *testing.T, port int) {
function testABEBulkCreate (line 698) | func testABEBulkCreate(t *testing.T, port int, useTrailers bool) {
function testABEBulkCreateWithError (line 838) | func testABEBulkCreateWithError(t *testing.T, port int) {
function testABELookup (line 902) | func testABELookup(t *testing.T, port int) {
function TestABEPatch (line 961) | func TestABEPatch(t *testing.T) {
function TestABEPatchBody (line 1005) | func TestABEPatchBody(t *testing.T) {
function mustMarshal (line 1137) | func mustMarshal(t *testing.T, i interface{}) string {
function postABE (line 1147) | func postABE(t *testing.T, port int, abe *examplepb.ABitOfEverything) (u...
function getABE (line 1171) | func getABE(t *testing.T, port int, uuid string) *examplepb.ABitOfEveryt...
function testABELookupNotFound (line 1194) | func testABELookupNotFound(t *testing.T, port int, useTrailers bool) {
function testABEList (line 1266) | func testABEList(t *testing.T, port int) {
function testABEDownload (line 1317) | func testABEDownload(t *testing.T, port int) {
function testABEBulkEcho (line 1342) | func testABEBulkEcho(t *testing.T, port int) {
function testABEBulkEchoZeroLength (line 1420) | func testABEBulkEchoZeroLength(t *testing.T, port int) {
function testAdditionalBindings (line 1452) | func testAdditionalBindings(t *testing.T, port int) {
function testABERepeated (line 1523) | func testABERepeated(t *testing.T, port int) {
function TestTimeout (line 1642) | func TestTimeout(t *testing.T) {
function TestInvalidTimeout (line 1667) | func TestInvalidTimeout(t *testing.T) {
function TestPostWithEmptyBody (line 1692) | func TestPostWithEmptyBody(t *testing.T) {
function TestUnknownPath (line 1712) | func TestUnknownPath(t *testing.T) {
function TestNotImplemented (line 1737) | func TestNotImplemented(t *testing.T) {
function TestInvalidArgument (line 1761) | func TestInvalidArgument(t *testing.T) {
function TestResponseBody (line 1786) | func TestResponseBody(t *testing.T) {
function testResponseBody (line 1797) | func testResponseBody(t *testing.T, port int) {
function TestResponseBodySameName (line 1820) | func TestResponseBodySameName(t *testing.T) {
function TestResponseBodyStream (line 1843) | func TestResponseBodyStream(t *testing.T) {
function TestResponseBodyStreamHttpBody (line 1865) | func TestResponseBodyStreamHttpBody(t *testing.T) {
function TestResponseBodyStreamHttpBodyError (line 1887) | func TestResponseBodyStreamHttpBodyError(t *testing.T) {
function readAll (line 1909) | func readAll(body io.ReadCloser) ([]string, error) {
function testResponseBodies (line 1925) | func testResponseBodies(t *testing.T, port int) {
function testResponseStrings (line 1961) | func testResponseStrings(t *testing.T, port int) {
function TestRequestQueryParams (line 2081) | func TestRequestQueryParams(t *testing.T) {
function TestRequestQueryParamsInProcessGateway (line 2085) | func TestRequestQueryParamsInProcessGateway(t *testing.T) {
function testRequestQueryParams (line 2089) | func testRequestQueryParams(t *testing.T, port int) {
function TestNonStandardNames (line 2217) | func TestNonStandardNames(t *testing.T) {
function testNonStandardNames (line 2410) | func testNonStandardNames(t *testing.T, port int, method string, jsonBod...
function testABEExists (line 2445) | func testABEExists(t *testing.T, port int) {
function testABEExistsNotFound (line 2486) | func testABEExistsNotFound(t *testing.T, port int) {
function testABEOptions (line 2502) | func testABEOptions(t *testing.T, port int) {
function testABETrace (line 2530) | func testABETrace(t *testing.T, port int) {
function testEchoWithNonASCIIHeaderValues (line 2564) | func testEchoWithNonASCIIHeaderValues(t *testing.T, port int, apiPrefix ...
function testEchoWithInvalidHeaderKey (line 2602) | func testEchoWithInvalidHeaderKey(t *testing.T, port int, apiPrefix stri...
function TestExcessBody (line 2642) | func TestExcessBody(t *testing.T) {
function testExcessBodyRPC (line 2658) | func testExcessBodyRPC(t *testing.T, port int) {
function testExcessBodyStream (line 2685) | func testExcessBodyStream(t *testing.T, port int) {
function testExcessBodyRPCUnexpected (line 2712) | func testExcessBodyRPCUnexpected(t *testing.T, port int) {
function testExcessBodyStreamUnexpected (line 2741) | func testExcessBodyStreamUnexpected(t *testing.T, port int) {
function testExcessBodyRPCWithBody (line 2770) | func testExcessBodyRPCWithBody(t *testing.T, port int) {
function testExcessBodyStreamWithBody (line 2799) | func testExcessBodyStreamWithBody(t *testing.T, port int) {
function testExcessBodyRPCWithBodyUnexpected (line 2828) | func testExcessBodyRPCWithBodyUnexpected(t *testing.T, port int) {
function testExcessBodyStreamWithBodyUnexpected (line 2857) | func testExcessBodyStreamWithBodyUnexpected(t *testing.T, port int) {
FILE: examples/internal/integration/main_test.go
function runGateway (line 24) | func runGateway(ctx context.Context, addr string, opts ...gwruntime.Serv...
function waitForGateway (line 36) | func waitForGateway(ctx context.Context, port uint16) error {
function runServers (line 56) | func runServers(ctx context.Context) <-chan error {
function TestMain (line 76) | func TestMain(m *testing.M) {
FILE: examples/internal/proto/examplepb/a_bit_of_everything.pb.go
constant _ (line 30) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 32) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type NumericEnum (line 36) | type NumericEnum
method Enum (line 57) | func (x NumericEnum) Enum() *NumericEnum {
method String (line 63) | func (x NumericEnum) String() string {
method Descriptor (line 67) | func (NumericEnum) Descriptor() protoreflect.EnumDescriptor {
method Type (line 71) | func (NumericEnum) Type() protoreflect.EnumType {
method Number (line 75) | func (x NumericEnum) Number() protoreflect.EnumNumber {
method EnumDescriptor (line 80) | func (NumericEnum) EnumDescriptor() ([]byte, []int) {
constant NumericEnum_ZERO (line 40) | NumericEnum_ZERO NumericEnum = 0
constant NumericEnum_ONE (line 42) | NumericEnum_ONE NumericEnum = 1
type SnakeCaseEnum (line 87) | type SnakeCaseEnum
method Enum (line 108) | func (x SnakeCaseEnum) Enum() *SnakeCaseEnum {
method String (line 114) | func (x SnakeCaseEnum) String() string {
method Descriptor (line 118) | func (SnakeCaseEnum) Descriptor() protoreflect.EnumDescriptor {
method Type (line 122) | func (SnakeCaseEnum) Type() protoreflect.EnumType {
method Number (line 126) | func (x SnakeCaseEnum) Number() protoreflect.EnumNumber {
method EnumDescriptor (line 131) | func (SnakeCaseEnum) EnumDescriptor() ([]byte, []int) {
constant SnakeCaseEnum_value_c (line 91) | SnakeCaseEnum_value_c SnakeCaseEnum = 0
constant SnakeCaseEnum_value_d (line 93) | SnakeCaseEnum_value_d SnakeCaseEnum = 1
type SnakeCase_0Enum (line 138) | type SnakeCase_0Enum
method Enum (line 159) | func (x SnakeCase_0Enum) Enum() *SnakeCase_0Enum {
method String (line 165) | func (x SnakeCase_0Enum) String() string {
method Descriptor (line 169) | func (SnakeCase_0Enum) Descriptor() protoreflect.EnumDescriptor {
method Type (line 173) | func (SnakeCase_0Enum) Type() protoreflect.EnumType {
method Number (line 177) | func (x SnakeCase_0Enum) Number() protoreflect.EnumNumber {
method EnumDescriptor (line 182) | func (SnakeCase_0Enum) EnumDescriptor() ([]byte, []int) {
constant SnakeCase_0Enum_value_e (line 142) | SnakeCase_0Enum_value_e SnakeCase_0Enum = 0
constant SnakeCase_0Enum_value_f (line 144) | SnakeCase_0Enum_value_f SnakeCase_0Enum = 1
type ABitOfEverything_Nested_DeepEnum (line 187) | type ABitOfEverything_Nested_DeepEnum
method Enum (line 208) | func (x ABitOfEverything_Nested_DeepEnum) Enum() *ABitOfEverything_Nes...
method String (line 214) | func (x ABitOfEverything_Nested_DeepEnum) String() string {
method Descriptor (line 218) | func (ABitOfEverything_Nested_DeepEnum) Descriptor() protoreflect.Enum...
method Type (line 222) | func (ABitOfEverything_Nested_DeepEnum) Type() protoreflect.EnumType {
method Number (line 226) | func (x ABitOfEverything_Nested_DeepEnum) Number() protoreflect.EnumNu...
method EnumDescriptor (line 231) | func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []in...
constant ABitOfEverything_Nested_FALSE (line 191) | ABitOfEverything_Nested_FALSE ABitOfEverything_Nested_DeepEnum = 0
constant ABitOfEverything_Nested_TRUE (line 193) | ABitOfEverything_Nested_TRUE ABitOfEverything_Nested_DeepEnum = 1
type ErrorResponse (line 235) | type ErrorResponse struct
method Reset (line 244) | func (x *ErrorResponse) Reset() {
method String (line 251) | func (x *ErrorResponse) String() string {
method ProtoMessage (line 255) | func (*ErrorResponse) ProtoMessage() {}
method ProtoReflect (line 257) | func (x *ErrorResponse) ProtoReflect() protoreflect.Message {
method Descriptor (line 270) | func (*ErrorResponse) Descriptor() ([]byte, []int) {
method GetCorrelationId (line 274) | func (x *ErrorResponse) GetCorrelationId() string {
method GetError (line 281) | func (x *ErrorResponse) GetError() *ErrorObject {
type ErrorObject (line 288) | type ErrorObject struct
method Reset (line 297) | func (x *ErrorObject) Reset() {
method String (line 304) | func (x *ErrorObject) String() string {
method ProtoMessage (line 308) | func (*ErrorObject) ProtoMessage() {}
method ProtoReflect (line 310) | func (x *ErrorObject) ProtoReflect() protoreflect.Message {
method Descriptor (line 323) | func (*ErrorObject) Descriptor() ([]byte, []int) {
method GetCode (line 327) | func (x *ErrorObject) GetCode() int32 {
method GetMessage (line 334) | func (x *ErrorObject) GetMessage() string {
type ABitOfEverything (line 342) | type ABitOfEverything struct
method Reset (line 420) | func (x *ABitOfEverything) Reset() {
method String (line 427) | func (x *ABitOfEverything) String() string {
method ProtoMessage (line 431) | func (*ABitOfEverything) ProtoMessage() {}
method ProtoReflect (line 433) | func (x *ABitOfEverything) ProtoReflect() protoreflect.Message {
method Descriptor (line 446) | func (*ABitOfEverything) Descriptor() ([]byte, []int) {
method GetSingleNested (line 450) | func (x *ABitOfEverything) GetSingleNested() *ABitOfEverything_Nested {
method GetUuid (line 457) | func (x *ABitOfEverything) GetUuid() string {
method GetNested (line 464) | func (x *ABitOfEverything) GetNested() []*ABitOfEverything_Nested {
method GetFloatValue (line 471) | func (x *ABitOfEverything) GetFloatValue() float32 {
method GetDoubleValue (line 478) | func (x *ABitOfEverything) GetDoubleValue() float64 {
method GetInt64Value (line 485) | func (x *ABitOfEverything) GetInt64Value() int64 {
method GetUint64Value (line 492) | func (x *ABitOfEverything) GetUint64Value() uint64 {
method GetInt32Value (line 499) | func (x *ABitOfEverything) GetInt32Value() int32 {
method GetFixed64Value (line 506) | func (x *ABitOfEverything) GetFixed64Value() uint64 {
method GetFixed32Value (line 513) | func (x *ABitOfEverything) GetFixed32Value() uint32 {
method GetBoolValue (line 520) | func (x *ABitOfEverything) GetBoolValue() bool {
method GetStringValue (line 527) | func (x *ABitOfEverything) GetStringValue() string {
method GetBytesValue (line 534) | func (x *ABitOfEverything) GetBytesValue() []byte {
method GetUint32Value (line 541) | func (x *ABitOfEverything) GetUint32Value() uint32 {
method GetEnumValue (line 548) | func (x *ABitOfEverything) GetEnumValue() NumericEnum {
method GetPathEnumValue (line 555) | func (x *ABitOfEverything) GetPathEnumValue() pathenum.PathEnum {
method GetNestedPathEnumValue (line 562) | func (x *ABitOfEverything) GetNestedPathEnumValue() pathenum.MessagePa...
method GetSfixed32Value (line 569) | func (x *ABitOfEverything) GetSfixed32Value() int32 {
method GetSfixed64Value (line 576) | func (x *ABitOfEverything) GetSfixed64Value() int64 {
method GetSint32Value (line 583) | func (x *ABitOfEverything) GetSint32Value() int32 {
method GetSint64Value (line 590) | func (x *ABitOfEverything) GetSint64Value() int64 {
method GetRepeatedStringValue (line 597) | func (x *ABitOfEverything) GetRepeatedStringValue() []string {
method GetOneofValue (line 604) | func (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofVal...
method GetOneofEmpty (line 611) | func (x *ABitOfEverything) GetOneofEmpty() *emptypb.Empty {
method GetOneofString (line 618) | func (x *ABitOfEverything) GetOneofString() string {
method GetMapValue (line 625) | func (x *ABitOfEverything) GetMapValue() map[string]NumericEnum {
method GetMappedStringValue (line 632) | func (x *ABitOfEverything) GetMappedStringValue() map[string]string {
method GetMappedNestedValue (line 639) | func (x *ABitOfEverything) GetMappedNestedValue() map[string]*ABitOfEv...
method GetNonConventionalNameValue (line 646) | func (x *ABitOfEverything) GetNonConventionalNameValue() string {
method GetTimestampValue (line 653) | func (x *ABitOfEverything) GetTimestampValue() *timestamppb.Timestamp {
method GetRepeatedEnumValue (line 660) | func (x *ABitOfEverything) GetRepeatedEnumValue() []NumericEnum {
method GetRepeatedEnumAnnotation (line 667) | func (x *ABitOfEverything) GetRepeatedEnumAnnotation() []NumericEnum {
method GetEnumValueAnnotation (line 674) | func (x *ABitOfEverything) GetEnumValueAnnotation() NumericEnum {
method GetRepeatedStringAnnotation (line 681) | func (x *ABitOfEverything) GetRepeatedStringAnnotation() []string {
method GetRepeatedNestedAnnotation (line 688) | func (x *ABitOfEverything) GetRepeatedNestedAnnotation() []*ABitOfEver...
method GetNestedAnnotation (line 695) | func (x *ABitOfEverything) GetNestedAnnotation() *ABitOfEverything_Nes...
method GetInt64OverrideType (line 702) | func (x *ABitOfEverything) GetInt64OverrideType() int64 {
method GetRequiredStringViaFieldBehaviorAnnotation (line 709) | func (x *ABitOfEverything) GetRequiredStringViaFieldBehaviorAnnotation...
method GetOutputOnlyStringViaFieldBehaviorAnnotation (line 716) | func (x *ABitOfEverything) GetOutputOnlyStringViaFieldBehaviorAnnotati...
method GetOptionalStringValue (line 723) | func (x *ABitOfEverything) GetOptionalStringValue() string {
method GetProductId (line 730) | func (x *ABitOfEverything) GetProductId() []string {
method GetOptionalStringField (line 737) | func (x *ABitOfEverything) GetOptionalStringField() string {
method GetRequiredStringField_1 (line 744) | func (x *ABitOfEverything) GetRequiredStringField_1() string {
method GetRequiredStringField_2 (line 751) | func (x *ABitOfEverything) GetRequiredStringField_2() string {
method GetRequiredFieldBehaviorJsonName (line 758) | func (x *ABitOfEverything) GetRequiredFieldBehaviorJsonName() string {
method GetRequiredFieldSchemaJsonName (line 765) | func (x *ABitOfEverything) GetRequiredFieldSchemaJsonName() string {
method GetTrailingOnly (line 772) | func (x *ABitOfEverything) GetTrailingOnly() string {
method GetTrailingOnlyDot (line 779) | func (x *ABitOfEverything) GetTrailingOnlyDot() string {
method GetTrailingBoth (line 786) | func (x *ABitOfEverything) GetTrailingBoth() string {
method GetTrailingMultiline (line 793) | func (x *ABitOfEverything) GetTrailingMultiline() string {
method GetUuids (line 800) | func (x *ABitOfEverything) GetUuids() []string {
type isABitOfEverything_OneofValue (line 807) | type isABitOfEverything_OneofValue interface
type ABitOfEverything_OneofEmpty (line 811) | type ABitOfEverything_OneofEmpty struct
method isABitOfEverything_OneofValue (line 819) | func (*ABitOfEverything_OneofEmpty) isABitOfEverything_OneofValue() {}
type ABitOfEverything_OneofString (line 815) | type ABitOfEverything_OneofString struct
method isABitOfEverything_OneofValue (line 821) | func (*ABitOfEverything_OneofString) isABitOfEverything_OneofValue() {}
type ABitOfEverythingRepeated (line 824) | type ABitOfEverythingRepeated struct
method Reset (line 848) | func (x *ABitOfEverythingRepeated) Reset() {
method String (line 855) | func (x *ABitOfEverythingRepeated) String() string {
method ProtoMessage (line 859) | func (*ABitOfEverythingRepeated) ProtoMessage() {}
method ProtoReflect (line 861) | func (x *ABitOfEverythingRepeated) ProtoReflect() protoreflect.Message {
method Descriptor (line 874) | func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) {
method GetPathRepeatedFloatValue (line 878) | func (x *ABitOfEverythingRepeated) GetPathRepeatedFloatValue() []float...
method GetPathRepeatedDoubleValue (line 885) | func (x *ABitOfEverythingRepeated) GetPathRepeatedDoubleValue() []floa...
method GetPathRepeatedInt64Value (line 892) | func (x *ABitOfEverythingRepeated) GetPathRepeatedInt64Value() []int64 {
method GetPathRepeatedUint64Value (line 899) | func (x *ABitOfEverythingRepeated) GetPathRepeatedUint64Value() []uint...
method GetPathRepeatedInt32Value (line 906) | func (x *ABitOfEverythingRepeated) GetPathRepeatedInt32Value() []int32 {
method GetPathRepeatedFixed64Value (line 913) | func (x *ABitOfEverythingRepeated) GetPathRepeatedFixed64Value() []uin...
method GetPathRepeatedFixed32Value (line 920) | func (x *ABitOfEverythingRepeated) GetPathRepeatedFixed32Value() []uin...
method GetPathRepeatedBoolValue (line 927) | func (x *ABitOfEverythingRepeated) GetPathRepeatedBoolValue() []bool {
method GetPathRepeatedStringValue (line 934) | func (x *ABitOfEverythingRepeated) GetPathRepeatedStringValue() []stri...
method GetPathRepeatedBytesValue (line 941) | func (x *ABitOfEverythingRepeated) GetPathRepeatedBytesValue() [][]byte {
method GetPathRepeatedUint32Value (line 948) | func (x *ABitOfEverythingRepeated) GetPathRepeatedUint32Value() []uint...
method GetPathRepeatedEnumValue (line 955) | func (x *ABitOfEverythingRepeated) GetPathRepeatedEnumValue() []Numeri...
method GetPathRepeatedSfixed32Value (line 962) | func (x *ABitOfEverythingRepeated) GetPathRepeatedSfixed32Value() []in...
method GetPathRepeatedSfixed64Value (line 969) | func (x *ABitOfEverythingRepeated) GetPathRepeatedSfixed64Value() []in...
method GetPathRepeatedSint32Value (line 976) | func (x *ABitOfEverythingRepeated) GetPathRepeatedSint32Value() []int32 {
method GetPathRepeatedSint64Value (line 983) | func (x *ABitOfEverythingRepeated) GetPathRepeatedSint64Value() []int64 {
type CheckStatusResponse (line 990) | type CheckStatusResponse struct
method Reset (line 998) | func (x *CheckStatusResponse) Reset() {
method String (line 1005) | func (x *CheckStatusResponse) String() string {
method ProtoMessage (line 1009) | func (*CheckStatusResponse) ProtoMessage() {}
method ProtoReflect (line 1011) | func (x *CheckStatusResponse) ProtoReflect() protoreflect.Message {
method Descriptor (line 1024) | func (*CheckStatusResponse) Descriptor() ([]byte, []int) {
method GetStatus (line 1028) | func (x *CheckStatusResponse) GetStatus() *status.Status {
type Body (line 1035) | type Body struct
method Reset (line 1043) | func (x *Body) Reset() {
method String (line 1050) | func (x *Body) String() string {
method ProtoMessage (line 1054) | func (*Body) ProtoMessage() {}
method ProtoReflect (line 1056) | func (x *Body) ProtoReflect() protoreflect.Message {
method Descriptor (line 1069) | func (*Body) Descriptor() ([]byte, []int) {
method GetName (line 1073) | func (x *Body) GetName() string {
type MessageWithBody (line 1080) | type MessageWithBody struct
method Reset (line 1089) | func (x *MessageWithBody) Reset() {
method String (line 1096) | func (x *MessageWithBody) String() string {
method ProtoMessage (line 1100) | func (*MessageWithBody) ProtoMessage() {}
method ProtoReflect (line 1102) | func (x *MessageWithBody) ProtoReflect() protoreflect.Message {
method Descriptor (line 1115) | func (*MessageWithBody) Descriptor() ([]byte, []int) {
method GetId (line 1119) | func (x *MessageWithBody) GetId() string {
method GetData (line 1126) | func (x *MessageWithBody) GetData() *Body {
type UpdateV2Request (line 1134) | type UpdateV2Request struct
method Reset (line 1144) | func (x *UpdateV2Request) Reset() {
method String (line 1151) | func (x *UpdateV2Request) String() string {
method ProtoMessage (line 1155) | func (*UpdateV2Request) ProtoMessage() {}
method ProtoReflect (line 1157) | func (x *UpdateV2Request) ProtoReflect() protoreflect.Message {
method Descriptor (line 1170) | func (*UpdateV2Request) Descriptor() ([]byte, []int) {
method GetAbe (line 1174) | func (x *UpdateV2Request) GetAbe() *ABitOfEverything {
method GetUpdateMask (line 1181) | func (x *UpdateV2Request) GetUpdateMask() *fieldmaskpb.FieldMask {
type Book (line 1192) | type Book struct
method Reset (line 1209) | func (x *Book) Reset() {
method String (line 1216) | func (x *Book) String() string {
method ProtoMessage (line 1220) | func (*Book) ProtoMessage() {}
method ProtoReflect (line 1222) | func (x *Book) ProtoReflect() protoreflect.Message {
method Descriptor (line 1235) | func (*Book) Descriptor() ([]byte, []int) {
method GetName (line 1239) | func (x *Book) GetName() string {
method GetId (line 1246) | func (x *Book) GetId() string {
method GetCreateTime (line 1253) | func (x *Book) GetCreateTime() *timestamppb.Timestamp {
type CreateBookRequest (line 1265) | type CreateBookRequest struct
method Reset (line 1284) | func (x *CreateBookRequest) Reset() {
method String (line 1291) | func (x *CreateBookRequest) String() string {
method ProtoMessage (line 1295) | func (*CreateBookRequest) ProtoMessage() {}
method ProtoReflect (line 1297) | func (x *CreateBookRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 1310) | func (*CreateBookRequest) Descriptor() ([]byte, []int) {
method GetParent (line 1314) | func (x *CreateBookRequest) GetParent() string {
method GetBook (line 1321) | func (x *CreateBookRequest) GetBook() *Book {
method GetBookId (line 1328) | func (x *CreateBookRequest) GetBookId() string {
type UpdateBookRequest (line 1338) | type UpdateBookRequest struct
method Reset (line 1355) | func (x *UpdateBookRequest) Reset() {
method String (line 1362) | func (x *UpdateBookRequest) String() string {
method ProtoMessage (line 1366) | func (*UpdateBookRequest) ProtoMessage() {}
method ProtoReflect (line 1368) | func (x *UpdateBookRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 1381) | func (*UpdateBookRequest) Descriptor() ([]byte, []int) {
method GetBook (line 1385) | func (x *UpdateBookRequest) GetBook() *Book {
method GetUpdateMask (line 1392) | func (x *UpdateBookRequest) GetUpdateMask() *fieldmaskpb.FieldMask {
method GetAllowMissing (line 1399) | func (x *UpdateBookRequest) GetAllowMissing() bool {
type SnakeEnumRequest (line 1406) | type SnakeEnumRequest struct
method Reset (line 1416) | func (x *SnakeEnumRequest) Reset() {
method String (line 1423) | func (x *SnakeEnumRequest) String() string {
method ProtoMessage (line 1427) | func (*SnakeEnumRequest) ProtoMessage() {}
method ProtoReflect (line 1429) | func (x *SnakeEnumRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 1442) | func (*SnakeEnumRequest) Descriptor() ([]byte, []int) {
method GetWhat (line 1446) | func (x *SnakeEnumRequest) GetWhat() SnakeCaseEnum {
method GetWho (line 1453) | func (x *SnakeEnumRequest) GetWho() SnakeCase_0Enum {
method GetWhere (line 1460) | func (x *SnakeEnumRequest) GetWhere() pathenum.SnakeCaseForImport {
type SnakeEnumResponse (line 1467) | type SnakeEnumResponse struct
method Reset (line 1473) | func (x *SnakeEnumResponse) Reset() {
method String (line 1480) | func (x *SnakeEnumResponse) String() string {
method ProtoMessage (line 1484) | func (*SnakeEnumResponse) ProtoMessage() {}
method ProtoReflect (line 1486) | func (x *SnakeEnumResponse) ProtoReflect() protoreflect.Message {
method Descriptor (line 1499) | func (*SnakeEnumResponse) Descriptor() ([]byte, []int) {
type RequiredMessageTypeRequest (line 1505) | type RequiredMessageTypeRequest struct
method Reset (line 1514) | func (x *RequiredMessageTypeRequest) Reset() {
method String (line 1521) | func (x *RequiredMessageTypeRequest) String() string {
method ProtoMessage (line 1525) | func (*RequiredMessageTypeRequest) ProtoMessage() {}
method ProtoReflect (line 1527) | func (x *RequiredMessageTypeRequest) ProtoReflect() protoreflect.Messa...
method Descriptor (line 1540) | func (*RequiredMessageTypeRequest) Descriptor() ([]byte, []int) {
method GetId (line 1544) | func (x *RequiredMessageTypeRequest) GetId() string {
method GetFoo (line 1551) | func (x *RequiredMessageTypeRequest) GetFoo() *Foo {
type Foo (line 1558) | type Foo struct
method Reset (line 1566) | func (x *Foo) Reset() {
method String (line 1573) | func (x *Foo) String() string {
method ProtoMessage (line 1577) | func (*Foo) ProtoMessage() {}
method ProtoReflect (line 1579) | func (x *Foo) ProtoReflect() protoreflect.Message {
method Descriptor (line 1592) | func (*Foo) Descriptor() ([]byte, []int) {
method GetBar (line 1596) | func (x *Foo) GetBar() *Bar {
type Bar (line 1603) | type Bar struct
method Reset (line 1611) | func (x *Bar) Reset() {
method String (line 1618) | func (x *Bar) String() string {
method ProtoMessage (line 1622) | func (*Bar) ProtoMessage() {}
method ProtoReflect (line 1624) | func (x *Bar) ProtoReflect() protoreflect.Message {
method Descriptor (line 1637) | func (*Bar) Descriptor() ([]byte, []int) {
method GetId (line 1641) | func (x *Bar) GetId() string {
type ABitOfEverything_Nested (line 1649) | type ABitOfEverything_Nested struct
method Reset (line 1661) | func (x *ABitOfEverything_Nested) Reset() {
method String (line 1668) | func (x *ABitOfEverything_Nested) String() string {
method ProtoMessage (line 1672) | func (*ABitOfEverything_Nested) ProtoMessage() {}
method ProtoReflect (line 1674) | func (x *ABitOfEverything_Nested) ProtoReflect() protoreflect.Message {
method Descriptor (line 1687) | func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) {
method GetName (line 1691) | func (x *ABitOfEverything_Nested) GetName() string {
method GetAmount (line 1698) | func (x *ABitOfEverything_Nested) GetAmount() uint32 {
method GetOk (line 1705) | func (x *ABitOfEverything_Nested) GetOk() ABitOfEverything_Nested_Deep...
function file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP (line 2849) | func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_ra...
function init (line 3009) | func init() { file_examples_internal_proto_examplepb_a_bit_of_everything...
function file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init (line 3010) | func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_in...
FILE: examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go
function request_ABitOfEverythingService_Create_0 (line 45) | func request_ABitOfEverythingService_Create_0(ctx context.Context, marsh...
function local_request_ABitOfEverythingService_Create_0 (line 221) | func local_request_ABitOfEverythingService_Create_0(ctx context.Context,...
function request_ABitOfEverythingService_CreateBody_0 (line 394) | func request_ABitOfEverythingService_CreateBody_0(ctx context.Context, m...
function local_request_ABitOfEverythingService_CreateBody_0 (line 409) | func local_request_ABitOfEverythingService_CreateBody_0(ctx context.Cont...
function request_ABitOfEverythingService_CreateBook_0 (line 423) | func request_ABitOfEverythingService_CreateBook_0(ctx context.Context, m...
function local_request_ABitOfEverythingService_CreateBook_0 (line 453) | func local_request_ABitOfEverythingService_CreateBook_0(ctx context.Cont...
function request_ABitOfEverythingService_UpdateBook_0 (line 482) | func request_ABitOfEverythingService_UpdateBook_0(ctx context.Context, m...
function local_request_ABitOfEverythingService_UpdateBook_0 (line 523) | func local_request_ABitOfEverythingService_UpdateBook_0(ctx context.Cont...
function request_ABitOfEverythingService_Lookup_0 (line 561) | func request_ABitOfEverythingService_Lookup_0(ctx context.Context, marsh...
function local_request_ABitOfEverythingService_Lookup_0 (line 582) | func local_request_ABitOfEverythingService_Lookup_0(ctx context.Context,...
function request_ABitOfEverythingService_Custom_0 (line 602) | func request_ABitOfEverythingService_Custom_0(ctx context.Context, marsh...
function local_request_ABitOfEverythingService_Custom_0 (line 629) | func local_request_ABitOfEverythingService_Custom_0(ctx context.Context,...
function request_ABitOfEverythingService_Custom_1 (line 655) | func request_ABitOfEverythingService_Custom_1(ctx context.Context, marsh...
function local_request_ABitOfEverythingService_Custom_1 (line 682) | func local_request_ABitOfEverythingService_Custom_1(ctx context.Context,...
function request_ABitOfEverythingService_DoubleColon_0 (line 708) | func request_ABitOfEverythingService_DoubleColon_0(ctx context.Context, ...
function local_request_ABitOfEverythingService_DoubleColon_0 (line 735) | func local_request_ABitOfEverythingService_DoubleColon_0(ctx context.Con...
function request_ABitOfEverythingService_Update_0 (line 759) | func request_ABitOfEverythingService_Update_0(ctx context.Context, marsh...
function local_request_ABitOfEverythingService_Update_0 (line 783) | func local_request_ABitOfEverythingService_Update_0(ctx context.Context,...
function request_ABitOfEverythingService_UpdateV2_0 (line 806) | func request_ABitOfEverythingService_UpdateV2_0(ctx context.Context, mar...
function local_request_ABitOfEverythingService_UpdateV2_0 (line 836) | func local_request_ABitOfEverythingService_UpdateV2_0(ctx context.Contex...
function request_ABitOfEverythingService_UpdateV2_1 (line 865) | func request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, mar...
function local_request_ABitOfEverythingService_UpdateV2_1 (line 906) | func local_request_ABitOfEverythingService_UpdateV2_1(ctx context.Contex...
function request_ABitOfEverythingService_UpdateV2_2 (line 944) | func request_ABitOfEverythingService_UpdateV2_2(ctx context.Context, mar...
function local_request_ABitOfEverythingService_UpdateV2_2 (line 968) | func local_request_ABitOfEverythingService_UpdateV2_2(ctx context.Contex...
function request_ABitOfEverythingService_Delete_0 (line 989) | func request_ABitOfEverythingService_Delete_0(ctx context.Context, marsh...
function local_request_ABitOfEverythingService_Delete_0 (line 1010) | func local_request_ABitOfEverythingService_Delete_0(ctx context.Context,...
function request_ABitOfEverythingService_GetQuery_0 (line 1030) | func request_ABitOfEverythingService_GetQuery_0(ctx context.Context, mar...
function local_request_ABitOfEverythingService_GetQuery_0 (line 1057) | func local_request_ABitOfEverythingService_GetQuery_0(ctx context.Contex...
function request_ABitOfEverythingService_GetRepeatedQuery_0 (line 1081) | func request_ABitOfEverythingService_GetRepeatedQuery_0(ctx context.Cont...
function local_request_ABitOfEverythingService_GetRepeatedQuery_0 (line 1228) | func local_request_ABitOfEverythingService_GetRepeatedQuery_0(ctx contex...
function request_ABitOfEverythingService_Echo_0 (line 1372) | func request_ABitOfEverythingService_Echo_0(ctx context.Context, marshal...
function local_request_ABitOfEverythingService_Echo_0 (line 1393) | func local_request_ABitOfEverythingService_Echo_0(ctx context.Context, m...
function request_ABitOfEverythingService_Echo_1 (line 1411) | func request_ABitOfEverythingService_Echo_1(ctx context.Context, marshal...
function local_request_ABitOfEverythingService_Echo_1 (line 1426) | func local_request_ABitOfEverythingService_Echo_1(ctx context.Context, m...
function request_ABitOfEverythingService_Echo_2 (line 1440) | func request_ABitOfEverythingService_Echo_2(ctx context.Context, marshal...
function local_request_ABitOfEverythingService_Echo_2 (line 1458) | func local_request_ABitOfEverythingService_Echo_2(ctx context.Context, m...
function request_ABitOfEverythingService_DeepPathEcho_0 (line 1473) | func request_ABitOfEverythingService_DeepPathEcho_0(ctx context.Context,...
function local_request_ABitOfEverythingService_DeepPathEcho_0 (line 1497) | func local_request_ABitOfEverythingService_DeepPathEcho_0(ctx context.Co...
function request_ABitOfEverythingService_Timeout_0 (line 1518) | func request_ABitOfEverythingService_Timeout_0(ctx context.Context, mars...
function local_request_ABitOfEverythingService_Timeout_0 (line 1530) | func local_request_ABitOfEverythingService_Timeout_0(ctx context.Context...
function request_ABitOfEverythingService_ErrorWithDetails_0 (line 1539) | func request_ABitOfEverythingService_ErrorWithDetails_0(ctx context.Cont...
function local_request_ABitOfEverythingService_ErrorWithDetails_0 (line 1551) | func local_request_ABitOfEverythingService_ErrorWithDetails_0(ctx contex...
function request_ABitOfEverythingService_GetMessageWithBody_0 (line 1560) | func request_ABitOfEverythingService_GetMessageWithBody_0(ctx context.Co...
function local_request_ABitOfEverythingService_GetMessageWithBody_0 (line 1584) | func local_request_ABitOfEverythingService_GetMessageWithBody_0(ctx cont...
function request_ABitOfEverythingService_PostWithEmptyBody_0 (line 1605) | func request_ABitOfEverythingService_PostWithEmptyBody_0(ctx context.Con...
function local_request_ABitOfEverythingService_PostWithEmptyBody_0 (line 1629) | func local_request_ABitOfEverythingService_PostWithEmptyBody_0(ctx conte...
function request_ABitOfEverythingService_CheckGetQueryParams_0 (line 1652) | func request_ABitOfEverythingService_CheckGetQueryParams_0(ctx context.C...
function local_request_ABitOfEverythingService_CheckGetQueryParams_0 (line 1679) | func local_request_ABitOfEverythingService_CheckGetQueryParams_0(ctx con...
function request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0 (line 1705) | func request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(ctx...
function local_request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0 (line 1738) | func local_request_ABitOfEverythingService_CheckNestedEnumGetQueryParams...
function request_ABitOfEverythingService_CheckPostQueryParams_0 (line 1770) | func request_ABitOfEverythingService_CheckPostQueryParams_0(ctx context....
function local_request_ABitOfEverythingService_CheckPostQueryParams_0 (line 1800) | func local_request_ABitOfEverythingService_CheckPostQueryParams_0(ctx co...
function request_ABitOfEverythingService_OverwriteRequestContentType_0 (line 1827) | func request_ABitOfEverythingService_OverwriteRequestContentType_0(ctx c...
function local_request_ABitOfEverythingService_OverwriteRequestContentType_0 (line 1842) | func local_request_ABitOfEverythingService_OverwriteRequestContentType_0...
function request_ABitOfEverythingService_OverwriteResponseContentType_0 (line 1854) | func request_ABitOfEverythingService_OverwriteResponseContentType_0(ctx ...
function local_request_ABitOfEverythingService_OverwriteResponseContentType_0 (line 1866) | func local_request_ABitOfEverythingService_OverwriteResponseContentType_...
function request_ABitOfEverythingService_CheckExternalPathEnum_0 (line 1875) | func request_ABitOfEverythingService_CheckExternalPathEnum_0(ctx context...
function local_request_ABitOfEverythingService_CheckExternalPathEnum_0 (line 1898) | func local_request_ABitOfEverythingService_CheckExternalPathEnum_0(ctx c...
function request_ABitOfEverythingService_CheckExternalNestedPathEnum_0 (line 1918) | func request_ABitOfEverythingService_CheckExternalNestedPathEnum_0(ctx c...
function local_request_ABitOfEverythingService_CheckExternalNestedPathEnum_0 (line 1941) | func local_request_ABitOfEverythingService_CheckExternalNestedPathEnum_0...
function request_ABitOfEverythingService_CheckStatus_0 (line 1961) | func request_ABitOfEverythingService_CheckStatus_0(ctx context.Context, ...
function local_request_ABitOfEverythingService_CheckStatus_0 (line 1973) | func local_request_ABitOfEverythingService_CheckStatus_0(ctx context.Con...
function request_ABitOfEverythingService_Exists_0 (line 1984) | func request_ABitOfEverythingService_Exists_0(ctx context.Context, marsh...
function local_request_ABitOfEverythingService_Exists_0 (line 2011) | func local_request_ABitOfEverythingService_Exists_0(ctx context.Context,...
function request_ABitOfEverythingService_CustomOptionsRequest_0 (line 2037) | func request_ABitOfEverythingService_CustomOptionsRequest_0(ctx context....
function local_request_ABitOfEverythingService_CustomOptionsRequest_0 (line 2064) | func local_request_ABitOfEverythingService_CustomOptionsRequest_0(ctx co...
function request_ABitOfEverythingService_TraceRequest_0 (line 2090) | func request_ABitOfEverythingService_TraceRequest_0(ctx context.Context,...
function local_request_ABitOfEverythingService_TraceRequest_0 (line 2117) | func local_request_ABitOfEverythingService_TraceRequest_0(ctx context.Co...
function request_ABitOfEverythingService_PostOneofEnum_0 (line 2141) | func request_ABitOfEverythingService_PostOneofEnum_0(ctx context.Context...
function local_request_ABitOfEverythingService_PostOneofEnum_0 (line 2161) | func local_request_ABitOfEverythingService_PostOneofEnum_0(ctx context.C...
function request_ABitOfEverythingService_PostRequiredMessageType_0 (line 2178) | func request_ABitOfEverythingService_PostRequiredMessageType_0(ctx conte...
function local_request_ABitOfEverythingService_PostRequiredMessageType_0 (line 2193) | func local_request_ABitOfEverythingService_PostRequiredMessageType_0(ctx...
function request_CamelCaseServiceName_Empty_0 (line 2205) | func request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler...
function local_request_CamelCaseServiceName_Empty_0 (line 2217) | func local_request_CamelCaseServiceName_Empty_0(ctx context.Context, mar...
function request_SnakeEnumService_SnakeEnum_0 (line 2226) | func request_SnakeEnumService_SnakeEnum_0(ctx context.Context, marshaler...
function local_request_SnakeEnumService_SnakeEnum_0 (line 2267) | func local_request_SnakeEnumService_SnakeEnum_0(ctx context.Context, mar...
function RegisterABitOfEverythingServiceHandlerServer (line 2310) | func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, m...
function RegisterCamelCaseServiceNameHandlerServer (line 3040) | func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux ...
function RegisterSnakeEnumServiceHandlerServer (line 3070) | func RegisterSnakeEnumServiceHandlerServer(ctx context.Context, mux *run...
function RegisterABitOfEverythingServiceHandlerFromEndpoint (line 3097) | func RegisterABitOfEverythingServiceHandlerFromEndpoint(ctx context.Cont...
function RegisterABitOfEverythingServiceHandler (line 3121) | func RegisterABitOfEverythingServiceHandler(ctx context.Context, mux *ru...
function RegisterABitOfEverythingServiceHandlerClient (line 3130) | func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, m...
function RegisterCamelCaseServiceNameHandlerFromEndpoint (line 3826) | func RegisterCamelCaseServiceNameHandlerFromEndpoint(ctx context.Context...
function RegisterCamelCaseServiceNameHandler (line 3850) | func RegisterCamelCaseServiceNameHandler(ctx context.Context, mux *runti...
function RegisterCamelCaseServiceNameHandlerClient (line 3859) | func RegisterCamelCaseServiceNameHandlerClient(ctx context.Context, mux ...
function RegisterSnakeEnumServiceHandlerFromEndpoint (line 3890) | func RegisterSnakeEnumServiceHandlerFromEndpoint(ctx context.Context, mu...
function RegisterSnakeEnumServiceHandler (line 3914) | func RegisterSnakeEnumServiceHandler(ctx context.Context, mux *runtime.S...
function RegisterSnakeEnumServiceHandlerClient (line 3923) | func RegisterSnakeEnumServiceHandlerClient(ctx context.Context, mux *run...
FILE: examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go
constant _ (line 26) | _ = grpc.SupportPackageIsVersion9
constant ABitOfEverythingService_Create_FullMethodName (line 29) | ABitOfEverythingService_Create_FullMethodName = "...
constant ABitOfEverythingService_CreateBody_FullMethodName (line 30) | ABitOfEverythingService_CreateBody_FullMethodName = "...
constant ABitOfEverythingService_CreateBook_FullMethodName (line 31) | ABitOfEverythingService_CreateBook_FullMethodName = "...
constant ABitOfEverythingService_UpdateBook_FullMethodName (line 32) | ABitOfEverythingService_UpdateBook_FullMethodName = "...
constant ABitOfEverythingService_Lookup_FullMethodName (line 33) | ABitOfEverythingService_Lookup_FullMethodName = "...
constant ABitOfEverythingService_Custom_FullMethodName (line 34) | ABitOfEverythingService_Custom_FullMethodName = "...
constant ABitOfEverythingService_DoubleColon_FullMethodName (line 35) | ABitOfEverythingService_DoubleColon_FullMethodName = "...
constant ABitOfEverythingService_Update_FullMethodName (line 36) | ABitOfEverythingService_Update_FullMethodName = "...
constant ABitOfEverythingService_UpdateV2_FullMethodName (line 37) | ABitOfEverythingService_UpdateV2_FullMethodName = "...
constant ABitOfEverythingService_Delete_FullMethodName (line 38) | ABitOfEverythingService_Delete_FullMethodName = "...
constant ABitOfEverythingService_GetQuery_FullMethodName (line 39) | ABitOfEverythingService_GetQuery_FullMethodName = "...
constant ABitOfEverythingService_GetRepeatedQuery_FullMethodName (line 40) | ABitOfEverythingService_GetRepeatedQuery_FullMethodName = "...
constant ABitOfEverythingService_Echo_FullMethodName (line 41) | ABitOfEverythingService_Echo_FullMethodName = "...
constant ABitOfEverythingService_DeepPathEcho_FullMethodName (line 42) | ABitOfEverythingService_DeepPathEcho_FullMethodName = "...
constant ABitOfEverythingService_NoBindings_FullMethodName (line 43) | ABitOfEverythingService_NoBindings_FullMethodName = "...
constant ABitOfEverythingService_Timeout_FullMethodName (line 44) | ABitOfEverythingService_Timeout_FullMethodName = "...
constant ABitOfEverythingService_ErrorWithDetails_FullMethodName (line 45) | ABitOfEverythingService_ErrorWithDetails_FullMethodName = "...
constant ABitOfEverythingService_GetMessageWithBody_FullMethodName (line 46) | ABitOfEverythingService_GetMessageWithBody_FullMethodName = "...
constant ABitOfEverythingService_PostWithEmptyBody_FullMethodName (line 47) | ABitOfEverythingService_PostWithEmptyBody_FullMethodName = "...
constant ABitOfEverythingService_CheckGetQueryParams_FullMethodName (line 48) | ABitOfEverythingService_CheckGetQueryParams_FullMethodName = "...
constant ABitOfEverythingService_CheckNestedEnumGetQueryParams_FullMethodName (line 49) | ABitOfEverythingService_CheckNestedEnumGetQueryParams_FullMethodName = "...
constant ABitOfEverythingService_CheckPostQueryParams_FullMethodName (line 50) | ABitOfEverythingService_CheckPostQueryParams_FullMethodName = "...
constant ABitOfEverythingService_OverwriteRequestContentType_FullMethodName (line 51) | ABitOfEverythingService_OverwriteRequestContentType_FullMethodName = "...
constant ABitOfEverythingService_OverwriteResponseContentType_FullMethodName (line 52) | ABitOfEverythingService_OverwriteResponseContentType_FullMethodName = "...
constant ABitOfEverythingService_CheckExternalPathEnum_FullMethodName (line 53) | ABitOfEverythingService_CheckExternalPathEnum_FullMethodName = "...
constant ABitOfEverythingService_CheckExternalNestedPathEnum_FullMethodName (line 54) | ABitOfEverythingService_CheckExternalNestedPathEnum_FullMethodName = "...
constant ABitOfEverythingService_CheckStatus_FullMethodName (line 55) | ABitOfEverythingService_CheckStatus_FullMethodName = "...
constant ABitOfEverythingService_Exists_FullMethodName (line 56) | ABitOfEverythingService_Exists_FullMethodName = "...
constant ABitOfEverythingService_CustomOptionsRequest_FullMethodName (line 57) | ABitOfEverythingService_CustomOptionsRequest_FullMethodName = "...
constant ABitOfEverythingService_TraceRequest_FullMethodName (line 58) | ABitOfEverythingService_TraceRequest_FullMethodName = "...
constant ABitOfEverythingService_PostOneofEnum_FullMethodName (line 59) | ABitOfEverythingService_PostOneofEnum_FullMethodName = "...
constant ABitOfEverythingService_PostRequiredMessageType_FullMethodName (line 60) | ABitOfEverythingService_PostRequiredMessageType_FullMethodName = "...
type ABitOfEverythingServiceClient (line 69) | type ABitOfEverythingServiceClient interface
type aBitOfEverythingServiceClient (line 115) | type aBitOfEverythingServiceClient struct
method Create (line 123) | func (c *aBitOfEverythingServiceClient) Create(ctx context.Context, in...
method CreateBody (line 133) | func (c *aBitOfEverythingServiceClient) CreateBody(ctx context.Context...
method CreateBook (line 143) | func (c *aBitOfEverythingServiceClient) CreateBook(ctx context.Context...
method UpdateBook (line 153) | func (c *aBitOfEverythingServiceClient) UpdateBook(ctx context.Context...
method Lookup (line 163) | func (c *aBitOfEverythingServiceClient) Lookup(ctx context.Context, in...
method Custom (line 173) | func (c *aBitOfEverythingServiceClient) Custom(ctx context.Context, in...
method DoubleColon (line 183) | func (c *aBitOfEverythingServiceClient) DoubleColon(ctx context.Contex...
method Update (line 193) | func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in...
method UpdateV2 (line 203) | func (c *aBitOfEverythingServiceClient) UpdateV2(ctx context.Context, ...
method Delete (line 213) | func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in...
method GetQuery (line 223) | func (c *aBitOfEverythingServiceClient) GetQuery(ctx context.Context, ...
method GetRepeatedQuery (line 233) | func (c *aBitOfEverythingServiceClient) GetRepeatedQuery(ctx context.C...
method Echo (line 243) | func (c *aBitOfEverythingServiceClient) Echo(ctx context.Context, in *...
method DeepPathEcho (line 253) | func (c *aBitOfEverythingServiceClient) DeepPathEcho(ctx context.Conte...
method NoBindings (line 263) | func (c *aBitOfEverythingServiceClient) NoBindings(ctx context.Context...
method Timeout (line 273) | func (c *aBitOfEverythingServiceClient) Timeout(ctx context.Context, i...
method ErrorWithDetails (line 283) | func (c *aBitOfEverythingServiceClient) ErrorWithDetails(ctx context.C...
method GetMessageWithBody (line 293) | func (c *aBitOfEverythingServiceClient) GetMessageWithBody(ctx context...
method PostWithEmptyBody (line 303) | func (c *aBitOfEverythingServiceClient) PostWithEmptyBody(ctx context....
method CheckGetQueryParams (line 313) | func (c *aBitOfEverythingServiceClient) CheckGetQueryParams(ctx contex...
method CheckNestedEnumGetQueryParams (line 323) | func (c *aBitOfEverythingServiceClient) CheckNestedEnumGetQueryParams(...
method CheckPostQueryParams (line 333) | func (c *aBitOfEverythingServiceClient) CheckPostQueryParams(ctx conte...
method OverwriteRequestContentType (line 343) | func (c *aBitOfEverythingServiceClient) OverwriteRequestContentType(ct...
method OverwriteResponseContentType (line 353) | func (c *aBitOfEverythingServiceClient) OverwriteResponseContentType(c...
method CheckExternalPathEnum (line 363) | func (c *aBitOfEverythingServiceClient) CheckExternalPathEnum(ctx cont...
method CheckExternalNestedPathEnum (line 373) | func (c *aBitOfEverythingServiceClient) CheckExternalNestedPathEnum(ct...
method CheckStatus (line 383) | func (c *aBitOfEverythingServiceClient) CheckStatus(ctx context.Contex...
method Exists (line 393) | func (c *aBitOfEverythingServiceClient) Exists(ctx context.Context, in...
method CustomOptionsRequest (line 403) | func (c *aBitOfEverythingServiceClient) CustomOptionsRequest(ctx conte...
method TraceRequest (line 413) | func (c *aBitOfEverythingServiceClient) TraceRequest(ctx context.Conte...
method PostOneofEnum (line 423) | func (c *aBitOfEverythingServiceClient) PostOneofEnum(ctx context.Cont...
method PostRequiredMessageType (line 433) | func (c *aBitOfEverythingServiceClient) PostRequiredMessageType(ctx co...
function NewABitOfEverythingServiceClient (line 119) | func NewABitOfEverythingServiceClient(cc grpc.ClientConnInterface) ABitO...
type ABitOfEverythingServiceServer (line 449) | type ABitOfEverythingServiceServer interface
type UnimplementedABitOfEverythingServiceServer (line 500) | type UnimplementedABitOfEverythingServiceServer struct
method Create (line 502) | func (UnimplementedABitOfEverythingServiceServer) Create(context.Conte...
method CreateBody (line 505) | func (UnimplementedABitOfEverythingServiceServer) CreateBody(context.C...
method CreateBook (line 508) | func (UnimplementedABitOfEverythingServiceServer) CreateBook(context.C...
method UpdateBook (line 511) | func (UnimplementedABitOfEverythingServiceServer) UpdateBook(context.C...
method Lookup (line 514) | func (UnimplementedABitOfEverythingServiceServer) Lookup(context.Conte...
method Custom (line 517) | func (UnimplementedABitOfEverythingServiceServer) Custom(context.Conte...
method DoubleColon (line 520) | func (UnimplementedABitOfEverythingServiceServer) DoubleColon(context....
method Update (line 523) | func (UnimplementedABitOfEverythingServiceServer) Update(context.Conte...
method UpdateV2 (line 526) | func (UnimplementedABitOfEverythingServiceServer) UpdateV2(context.Con...
method Delete (line 529) | func (UnimplementedABitOfEverythingServiceServer) Delete(context.Conte...
method GetQuery (line 532) | func (UnimplementedABitOfEverythingServiceServer) GetQuery(context.Con...
method GetRepeatedQuery (line 535) | func (UnimplementedABitOfEverythingServiceServer) GetRepeatedQuery(con...
method Echo (line 538) | func (UnimplementedABitOfEverythingServiceServer) Echo(context.Context...
method DeepPathEcho (line 541) | func (UnimplementedABitOfEverythingServiceServer) DeepPathEcho(context...
method NoBindings (line 544) | func (UnimplementedABitOfEverythingServiceServer) NoBindings(context.C...
method Timeout (line 547) | func (UnimplementedABitOfEverythingServiceServer) Timeout(context.Cont...
method ErrorWithDetails (line 550) | func (UnimplementedABitOfEverythingServiceServer) ErrorWithDetails(con...
method GetMessageWithBody (line 553) | func (UnimplementedABitOfEverythingServiceServer) GetMessageWithBody(c...
method PostWithEmptyBody (line 556) | func (UnimplementedABitOfEverythingServiceServer) PostWithEmptyBody(co...
method CheckGetQueryParams (line 559) | func (UnimplementedABitOfEverythingServiceServer) CheckGetQueryParams(...
method CheckNestedEnumGetQueryParams (line 562) | func (UnimplementedABitOfEverythingServiceServer) CheckNestedEnumGetQu...
method CheckPostQueryParams (line 565) | func (UnimplementedABitOfEverythingServiceServer) CheckPostQueryParams...
method OverwriteRequestContentType (line 568) | func (UnimplementedABitOfEverythingServiceServer) OverwriteRequestCont...
method OverwriteResponseContentType (line 571) | func (UnimplementedABitOfEverythingServiceServer) OverwriteResponseCon...
method CheckExternalPathEnum (line 574) | func (UnimplementedABitOfEverythingServiceServer) CheckExternalPathEnu...
method CheckExternalNestedPathEnum (line 577) | func (UnimplementedABitOfEverythingServiceServer) CheckExternalNestedP...
method CheckStatus (line 580) | func (UnimplementedABitOfEverythingServiceServer) CheckStatus(context....
method Exists (line 583) | func (UnimplementedABitOfEverythingServiceServer) Exists(context.Conte...
method CustomOptionsRequest (line 586) | func (UnimplementedABitOfEverythingServiceServer) CustomOptionsRequest...
method TraceRequest (line 589) | func (UnimplementedABitOfEverythingServiceServer) TraceRequest(context...
method PostOneofEnum (line 592) | func (UnimplementedABitOfEverythingServiceServer) PostOneofEnum(contex...
method PostRequiredMessageType (line 595) | func (UnimplementedABitOfEverythingServiceServer) PostRequiredMessageT...
method testEmbeddedByValue (line 598) | func (UnimplementedABitOfEverythingServiceServer) testEmbeddedByValue(...
type UnsafeABitOfEverythingServiceServer (line 603) | type UnsafeABitOfEverythingServiceServer interface
function RegisterABitOfEverythingServiceServer (line 607) | func RegisterABitOfEverythingServiceServer(s grpc.ServiceRegistrar, srv ...
function _ABitOfEverythingService_Create_Handler (line 618) | func _ABitOfEverythingService_Create_Handler(srv interface{}, ctx contex...
function _ABitOfEverythingService_CreateBody_Handler (line 636) | func _ABitOfEverythingService_CreateBody_Handler(srv interface{}, ctx co...
function _ABitOfEverythingService_CreateBook_Handler (line 654) | func _ABitOfEverythingService_CreateBook_Handler(srv interface{}, ctx co...
function _ABitOfEverythingService_UpdateBook_Handler (line 672) | func _ABitOfEverythingService_UpdateBook_Handler(srv interface{}, ctx co...
function _ABitOfEverythingService_Lookup_Handler (line 690) | func _ABitOfEverythingService_Lookup_Handler(srv interface{}, ctx contex...
function _ABitOfEverythingService_Custom_Handler (line 708) | func _ABitOfEverythingService_Custom_Handler(srv interface{}, ctx contex...
function _ABitOfEverythingService_DoubleColon_Handler (line 726) | func _ABitOfEverythingService_DoubleColon_Handler(srv interface{}, ctx c...
function _ABitOfEverythingService_Update_Handler (line 744) | func _ABitOfEverythingService_Update_Handler(srv interface{}, ctx contex...
function _ABitOfEverythingService_UpdateV2_Handler (line 762) | func _ABitOfEverythingService_UpdateV2_Handler(srv interface{}, ctx cont...
function _ABitOfEverythingService_Delete_Handler (line 780) | func _ABitOfEverythingService_Delete_Handler(srv interface{}, ctx contex...
function _ABitOfEverythingService_GetQuery_Handler (line 798) | func _ABitOfEverythingService_GetQuery_Handler(srv interface{}, ctx cont...
function _ABitOfEverythingService_GetRepeatedQuery_Handler (line 816) | func _ABitOfEverythingService_GetRepeatedQuery_Handler(srv interface{}, ...
function _ABitOfEverythingService_Echo_Handler (line 834) | func _ABitOfEverythingService_Echo_Handler(srv interface{}, ctx context....
function _ABitOfEverythingService_DeepPathEcho_Handler (line 852) | func _ABitOfEverythingService_DeepPathEcho_Handler(srv interface{}, ctx ...
function _ABitOfEverythingService_NoBindings_Handler (line 870) | func _ABitOfEverythingService_NoBindings_Handler(srv interface{}, ctx co...
function _ABitOfEverythingService_Timeout_Handler (line 888) | func _ABitOfEverythingService_Timeout_Handler(srv interface{}, ctx conte...
function _ABitOfEverythingService_ErrorWithDetails_Handler (line 906) | func _ABitOfEverythingService_ErrorWithDetails_Handler(srv interface{}, ...
function _ABitOfEverythingService_GetMessageWithBody_Handler (line 924) | func _ABitOfEverythingService_GetMessageWithBody_Handler(srv interface{}...
function _ABitOfEverythingService_PostWithEmptyBody_Handler (line 942) | func _ABitOfEverythingService_PostWithEmptyBody_Handler(srv interface{},...
function _ABitOfEverythingService_CheckGetQueryParams_Handler (line 960) | func _ABitOfEverythingService_CheckGetQueryParams_Handler(srv interface{...
function _ABitOfEverythingService_CheckNestedEnumGetQueryParams_Handler (line 978) | func _ABitOfEverythingService_CheckNestedEnumGetQueryParams_Handler(srv ...
function _ABitOfEverythingService_CheckPostQueryParams_Handler (line 996) | func _ABitOfEverythingService_CheckPostQueryParams_Handler(srv interface...
function _ABitOfEverythingService_OverwriteRequestContentType_Handler (line 1014) | func _ABitOfEverythingService_OverwriteRequestContentType_Handler(srv in...
function _ABitOfEverythingService_OverwriteResponseContentType_Handler (line 1032) | func _ABitOfEverythingService_OverwriteResponseContentType_Handler(srv i...
function _ABitOfEverythingService_CheckExternalPathEnum_Handler (line 1050) | func _ABitOfEverythingService_CheckExternalPathEnum_Handler(srv interfac...
function _ABitOfEverythingService_CheckExternalNestedPathEnum_Handler (line 1068) | func _ABitOfEverythingService_CheckExternalNestedPathEnum_Handler(srv in...
function _ABitOfEverythingService_CheckStatus_Handler (line 1086) | func _ABitOfEverythingService_CheckStatus_Handler(srv interface{}, ctx c...
function _ABitOfEverythingService_Exists_Handler (line 1104) | func _ABitOfEverythingService_Exists_Handler(srv interface{}, ctx contex...
function _ABitOfEverythingService_CustomOptionsRequest_Handler (line 1122) | func _ABitOfEverythingService_CustomOptionsRequest_Handler(srv interface...
function _ABitOfEverythingService_TraceRequest_Handler (line 1140) | func _ABitOfEverythingService_TraceRequest_Handler(srv interface{}, ctx ...
function _ABitOfEverythingService_PostOneofEnum_Handler (line 1158) | func _ABitOfEverythingService_PostOneofEnum_Handler(srv interface{}, ctx...
function _ABitOfEverythingService_PostRequiredMessageType_Handler (line 1176) | func _ABitOfEverythingService_PostRequiredMessageType_Handler(srv interf...
constant CamelCaseServiceName_Empty_FullMethodName (line 1335) | CamelCaseServiceName_Empty_FullMethodName = "/grpc.gateway.examples.inte...
type CamelCaseServiceNameClient (line 1343) | type CamelCaseServiceNameClient interface
type camelCaseServiceNameClient (line 1347) | type camelCaseServiceNameClient struct
method Empty (line 1355) | func (c *camelCaseServiceNameClient) Empty(ctx context.Context, in *em...
function NewCamelCaseServiceNameClient (line 1351) | func NewCamelCaseServiceNameClient(cc grpc.ClientConnInterface) CamelCas...
type CamelCaseServiceNameServer (line 1370) | type CamelCaseServiceNameServer interface
type UnimplementedCamelCaseServiceNameServer (line 1379) | type UnimplementedCamelCaseServiceNameServer struct
method Empty (line 1381) | func (UnimplementedCamelCaseServiceNameServer) Empty(context.Context, ...
method testEmbeddedByValue (line 1384) | func (UnimplementedCamelCaseServiceNameServer) testEmbeddedByValue() {}
type UnsafeCamelCaseServiceNameServer (line 1389) | type UnsafeCamelCaseServiceNameServer interface
function RegisterCamelCaseServiceNameServer (line 1393) | func RegisterCamelCaseServiceNameServer(s grpc.ServiceRegistrar, srv Cam...
function _CamelCaseServiceName_Empty_Handler (line 1404) | func _CamelCaseServiceName_Empty_Handler(srv interface{}, ctx context.Co...
constant AnotherServiceWithNoBindings_NoBindings_FullMethodName (line 1439) | AnotherServiceWithNoBindings_NoBindings_FullMethodName = "/grpc.gateway....
type AnotherServiceWithNoBindingsClient (line 1445) | type AnotherServiceWithNoBindingsClient interface
type anotherServiceWithNoBindingsClient (line 1449) | type anotherServiceWithNoBindingsClient struct
method NoBindings (line 1457) | func (c *anotherServiceWithNoBindingsClient) NoBindings(ctx context.Co...
function NewAnotherServiceWithNoBindingsClient (line 1453) | func NewAnotherServiceWithNoBindingsClient(cc grpc.ClientConnInterface) ...
type AnotherServiceWithNoBindingsServer (line 1470) | type AnotherServiceWithNoBindingsServer interface
type UnimplementedAnotherServiceWithNoBindingsServer (line 1479) | type UnimplementedAnotherServiceWithNoBindingsServer struct
method NoBindings (line 1481) | func (UnimplementedAnotherServiceWithNoBindingsServer) NoBindings(cont...
method testEmbeddedByValue (line 1484) | func (UnimplementedAnotherServiceWithNoBindingsServer) testEmbeddedByV...
type UnsafeAnotherServiceWithNoBindingsServer (line 1489) | type UnsafeAnotherServiceWithNoBindingsServer interface
function RegisterAnotherServiceWithNoBindingsServer (line 1493) | func RegisterAnotherServiceWithNoBindingsServer(s grpc.ServiceRegistrar,...
function _AnotherServiceWithNoBindings_NoBindings_Handler (line 1504) | func _AnotherServiceWithNoBindings_NoBindings_Handler(srv interface{}, c...
constant SnakeEnumService_SnakeEnum_FullMethodName (line 1539) | SnakeEnumService_SnakeEnum_FullMethodName = "/grpc.gateway.examples.inte...
type SnakeEnumServiceClient (line 1545) | type SnakeEnumServiceClient interface
type snakeEnumServiceClient (line 1549) | type snakeEnumServiceClient struct
method SnakeEnum (line 1557) | func (c *snakeEnumServiceClient) SnakeEnum(ctx context.Context, in *Sn...
function NewSnakeEnumServiceClient (line 1553) | func NewSnakeEnumServiceClient(cc grpc.ClientConnInterface) SnakeEnumSer...
type SnakeEnumServiceServer (line 1570) | type SnakeEnumServiceServer interface
type UnimplementedSnakeEnumServiceServer (line 1579) | type UnimplementedSnakeEnumServiceServer struct
method SnakeEnum (line 1581) | func (UnimplementedSnakeEnumServiceServer) SnakeEnum(context.Context, ...
method testEmbeddedByValue (line 1584) | func (UnimplementedSnakeEnumServiceServer) testEmbeddedByValue() {}
type UnsafeSnakeEnumServiceServer (line 1589) | type UnsafeSnakeEnumServiceServer interface
function RegisterSnakeEnumServiceServer (line 1593) | func RegisterSnakeEnumServiceServer(s grpc.ServiceRegistrar, srv SnakeEn...
function _SnakeEnumService_SnakeEnum_Handler (line 1604) | func _SnakeEnumService_SnakeEnum_Handler(srv interface{}, ctx context.Co...
FILE: examples/internal/proto/examplepb/camel_case_service.pb.go
constant _ (line 20) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 22) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type CamelStatus (line 25) | type CamelStatus
method Enum (line 47) | func (x CamelStatus) Enum() *CamelStatus {
method String (line 53) | func (x CamelStatus) String() string {
method Descriptor (line 57) | func (CamelStatus) Descriptor() protoreflect.EnumDescriptor {
method Type (line 61) | func (CamelStatus) Type() protoreflect.EnumType {
method Number (line 65) | func (x CamelStatus) Number() protoreflect.EnumNumber {
method EnumDescriptor (line 70) | func (CamelStatus) EnumDescriptor() ([]byte, []int) {
constant CamelStatus_CAMEL_STATUS_UNSPECIFIED (line 28) | CamelStatus_CAMEL_STATUS_UNSPECIFIED CamelStatus = 0
constant CamelStatus_CAMEL_STATUS_AVAILABLE (line 29) | CamelStatus_CAMEL_STATUS_AVAILABLE CamelStatus = 1
constant CamelStatus_CAMEL_STATUS_PENDING (line 30) | CamelStatus_CAMEL_STATUS_PENDING CamelStatus = 2
type GetStatusRequest (line 74) | type GetStatusRequest struct
method Reset (line 82) | func (x *GetStatusRequest) Reset() {
method String (line 89) | func (x *GetStatusRequest) String() string {
method ProtoMessage (line 93) | func (*GetStatusRequest) ProtoMessage() {}
method ProtoReflect (line 95) | func (x *GetStatusRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 108) | func (*GetStatusRequest) Descriptor() ([]byte, []int) {
method GetState (line 112) | func (x *GetStatusRequest) GetState() CamelStatus {
type GetStatusResponse (line 119) | type GetStatusResponse struct
method Reset (line 127) | func (x *GetStatusResponse) Reset() {
method String (line 134) | func (x *GetStatusResponse) String() string {
method ProtoMessage (line 138) | func (*GetStatusResponse) ProtoMessage() {}
method ProtoReflect (line 140) | func (x *GetStatusResponse) ProtoReflect() protoreflect.Message {
method Descriptor (line 153) | func (*GetStatusResponse) Descriptor() ([]byte, []int) {
method GetState (line 157) | func (x *GetStatusResponse) GetState() CamelStatus {
type PostBookRequest (line 164) | type PostBookRequest struct
method Reset (line 172) | func (x *PostBookRequest) Reset() {
method String (line 179) | func (x *PostBookRequest) String() string {
method ProtoMessage (line 183) | func (*PostBookRequest) ProtoMessage() {}
method ProtoReflect (line 185) | func (x *PostBookRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 198) | func (*PostBookRequest) Descriptor() ([]byte, []int) {
method GetBook (line 202) | func (x *PostBookRequest) GetBook() *sub.CreateBook {
type PostBookResponse (line 209) | type PostBookResponse struct
method Reset (line 217) | func (x *PostBookResponse) Reset() {
method String (line 224) | func (x *PostBookResponse) String() string {
method ProtoMessage (line 228) | func (*PostBookResponse) ProtoMessage() {}
method ProtoReflect (line 230) | func (x *PostBookResponse) ProtoReflect() protoreflect.Message {
method Descriptor (line 243) | func (*PostBookResponse) Descriptor() ([]byte, []int) {
method GetBook (line 247) | func (x *PostBookResponse) GetBook() *sub.CreateBook {
function file_examples_internal_proto_examplepb_camel_case_service_proto_rawDescGZIP (line 337) | func file_examples_internal_proto_examplepb_camel_case_service_proto_raw...
function init (line 370) | func init() { file_examples_internal_proto_examplepb_camel_case_service_...
function file_examples_internal_proto_examplepb_camel_case_service_proto_init (line 371) | func file_examples_internal_proto_examplepb_camel_case_service_proto_ini...
FILE: examples/internal/proto/examplepb/camel_case_service.pb.gw.go
function request_Camel_CaseService_GetStatus_0 (line 38) | func request_Camel_CaseService_GetStatus_0(ctx context.Context, marshale...
function local_request_Camel_CaseService_GetStatus_0 (line 61) | func local_request_Camel_CaseService_GetStatus_0(ctx context.Context, ma...
function request_Camel_CaseService_Post_Book_0 (line 81) | func request_Camel_CaseService_Post_Book_0(ctx context.Context, marshale...
function local_request_Camel_CaseService_Post_Book_0 (line 96) | func local_request_Camel_CaseService_Post_Book_0(ctx context.Context, ma...
function RegisterCamel_CaseServiceHandlerServer (line 113) | func RegisterCamel_CaseServiceHandlerServer(ctx context.Context, mux *ru...
function RegisterCamel_CaseServiceHandlerFromEndpoint (line 160) | func RegisterCamel_CaseServiceHandlerFromEndpoint(ctx context.Context, m...
function RegisterCamel_CaseServiceHandler (line 184) | func RegisterCamel_CaseServiceHandler(ctx context.Context, mux *runtime....
function RegisterCamel_CaseServiceHandlerClient (line 193) | func RegisterCamel_CaseServiceHandlerClient(ctx context.Context, mux *ru...
FILE: examples/internal/proto/examplepb/camel_case_service_grpc.pb.go
constant _ (line 19) | _ = grpc.SupportPackageIsVersion9
constant Camel_CaseService_GetStatus_FullMethodName (line 22) | Camel_CaseService_GetStatus_FullMethodName = "/grpc.gateway.examples.int...
constant Camel_CaseService_Post_Book_FullMethodName (line 23) | Camel_CaseService_Post_Book_FullMethodName = "/grpc.gateway.examples.int...
type Camel_CaseServiceClient (line 33) | type Camel_CaseServiceClient interface
type camel_CaseServiceClient (line 38) | type camel_CaseServiceClient struct
method GetStatus (line 46) | func (c *camel_CaseServiceClient) GetStatus(ctx context.Context, in *G...
method Post_Book (line 56) | func (c *camel_CaseServiceClient) Post_Book(ctx context.Context, in *P...
function NewCamel_CaseServiceClient (line 42) | func NewCamel_CaseServiceClient(cc grpc.ClientConnInterface) Camel_CaseS...
type Camel_CaseServiceServer (line 73) | type Camel_CaseServiceServer interface
type UnimplementedCamel_CaseServiceServer (line 83) | type UnimplementedCamel_CaseServiceServer struct
method GetStatus (line 85) | func (UnimplementedCamel_CaseServiceServer) GetStatus(context.Context,...
method Post_Book (line 88) | func (UnimplementedCamel_CaseServiceServer) Post_Book(context.Context,...
method testEmbeddedByValue (line 91) | func (UnimplementedCamel_CaseServiceServer) testEmbeddedByValue() {}
type UnsafeCamel_CaseServiceServer (line 96) | type UnsafeCamel_CaseServiceServer interface
function RegisterCamel_CaseServiceServer (line 100) | func RegisterCamel_CaseServiceServer(s grpc.ServiceRegistrar, srv Camel_...
function _Camel_CaseService_GetStatus_Handler (line 111) | func _Camel_CaseService_GetStatus_Handler(srv interface{}, ctx context.C...
function _Camel_CaseService_Post_Book_Handler (line 129) | func _Camel_CaseService_Post_Book_Handler(srv interface{}, ctx context.C...
FILE: examples/internal/proto/examplepb/echo_service.pb.go
constant _ (line 28) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 30) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type Embedded (line 34) | type Embedded struct
method Reset (line 46) | func (x *Embedded) Reset() {
method String (line 53) | func (x *Embedded) String() string {
method ProtoMessage (line 57) | func (*Embedded) ProtoMessage() {}
method ProtoReflect (line 59) | func (x *Embedded) ProtoReflect() protoreflect.Message {
method Descriptor (line 72) | func (*Embedded) Descriptor() ([]byte, []int) {
method GetMark (line 76) | func (m *Embedded) GetMark() isEmbedded_Mark {
method GetProgress (line 83) | func (x *Embedded) GetProgress() int64 {
method GetNote (line 90) | func (x *Embedded) GetNote() string {
type isEmbedded_Mark (line 97) | type isEmbedded_Mark interface
type Embedded_Progress (line 101) | type Embedded_Progress struct
method isEmbedded_Mark (line 109) | func (*Embedded_Progress) isEmbedded_Mark() {}
type Embedded_Note (line 105) | type Embedded_Note struct
method isEmbedded_Mark (line 111) | func (*Embedded_Note) isEmbedded_Mark() {}
type NestedMessage (line 113) | type NestedMessage struct
method Reset (line 122) | func (x *NestedMessage) Reset() {
method String (line 129) | func (x *NestedMessage) String() string {
method ProtoMessage (line 133) | func (*NestedMessage) ProtoMessage() {}
method ProtoReflect (line 135) | func (x *NestedMessage) ProtoReflect() protoreflect.Message {
method Descriptor (line 148) | func (*NestedMessage) Descriptor() ([]byte, []int) {
method GetNId (line 152) | func (x *NestedMessage) GetNId() string {
method GetVal (line 159) | func (x *NestedMessage) GetVal() string {
type SimpleMessage (line 167) | type SimpleMessage struct
method Reset (line 190) | func (x *SimpleMessage) Reset() {
method String (line 197) | func (x *SimpleMessage) String() string {
method ProtoMessage (line 201) | func (*SimpleMessage) ProtoMessage() {}
method ProtoReflect (line 203) | func (x *SimpleMessage) ProtoReflect() protoreflect.Message {
method Descriptor (line 216) | func (*SimpleMessage) Descriptor() ([]byte, []int) {
method GetId (line 220) | func (x *SimpleMessage) GetId() string {
method GetNum (line 227) | func (x *SimpleMessage) GetNum() int64 {
method GetCode (line 234) | func (m *SimpleMessage) GetCode() isSimpleMessage_Code {
method GetLineNum (line 241) | func (x *SimpleMessage) GetLineNum() int64 {
method GetLang (line 248) | func (x *SimpleMessage) GetLang() string {
method GetStatus (line 255) | func (x *SimpleMessage) GetStatus() *Embedded {
method GetExt (line 262) | func (m *SimpleMessage) GetExt() isSimpleMessage_Ext {
method GetEn (line 269) | func (x *SimpleMessage) GetEn() int64 {
method GetNo (line 276) | func (x *SimpleMessage) GetNo() *Embedded {
method GetResourceId (line 283) | func (x *SimpleMessage) GetResourceId() string {
method GetNId (line 290) | func (x *SimpleMessage) GetNId() *NestedMessage {
type isSimpleMessage_Code (line 297) | type isSimpleMessage_Code interface
type SimpleMessage_LineNum (line 301) | type SimpleMessage_LineNum struct
method isSimpleMessage_Code (line 309) | func (*SimpleMessage_LineNum) isSimpleMessage_Code() {}
type SimpleMessage_Lang (line 305) | type SimpleMessage_Lang struct
method isSimpleMessage_Code (line 311) | func (*SimpleMessage_Lang) isSimpleMessage_Code() {}
type isSimpleMessage_Ext (line 313) | type isSimpleMessage_Ext interface
type SimpleMessage_En (line 317) | type SimpleMessage_En struct
method isSimpleMessage_Ext (line 325) | func (*SimpleMessage_En) isSimpleMessage_Ext() {}
type SimpleMessage_No (line 321) | type SimpleMessage_No struct
method isSimpleMessage_Ext (line 327) | func (*SimpleMessage_No) isSimpleMessage_Ext() {}
type DynamicMessage (line 331) | type DynamicMessage struct
method Reset (line 340) | func (x *DynamicMessage) Reset() {
method String (line 347) | func (x *DynamicMessage) String() string {
method ProtoMessage (line 351) | func (*DynamicMessage) ProtoMessage() {}
method ProtoReflect (line 353) | func (x *DynamicMessage) ProtoReflect() protoreflect.Message {
method Descriptor (line 366) | func (*DynamicMessage) Descriptor() ([]byte, []int) {
method GetStructField (line 370) | func (x *DynamicMessage) GetStructField() *structpb.Struct {
method GetValueField (line 377) | func (x *DynamicMessage) GetValueField() *structpb.Value {
type DynamicMessageUpdate (line 384) | type DynamicMessageUpdate struct
method Reset (line 393) | func (x *DynamicMessageUpdate) Reset() {
method String (line 400) | func (x *DynamicMessageUpdate) String() string {
method ProtoMessage (line 404) | func (*DynamicMessageUpdate) ProtoMessage() {}
method ProtoReflect (line 406) | func (x *DynamicMessageUpdate) ProtoReflect() protoreflect.Message {
method Descriptor (line 419) | func (*DynamicMessageUpdate) Descriptor() ([]byte, []int) {
method GetBody (line 423) | func (x *DynamicMessageUpdate) GetBody() *DynamicMessage {
method GetUpdateMask (line 430) | func (x *DynamicMessageUpdate) GetUpdateMask() *fieldmaskpb.FieldMask {
type StatusCheckRequest (line 439) | type StatusCheckRequest struct
method Reset (line 451) | func (x *StatusCheckRequest) Reset() {
method String (line 458) | func (x *StatusCheckRequest) String() string {
method ProtoMessage (line 462) | func (*StatusCheckRequest) ProtoMessage() {}
method ProtoReflect (line 464) | func (x *StatusCheckRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 477) | func (*StatusCheckRequest) Descriptor() ([]byte, []int) {
method GetId (line 481) | func (x *StatusCheckRequest) GetId() string {
method GetSubStatus (line 488) | func (x *StatusCheckRequest) GetSubStatus() *sub.Status {
method GetSub2Status (line 495) | func (x *StatusCheckRequest) GetSub2Status() *sub2.Status {
type StatusCheckResponse (line 502) | type StatusCheckResponse struct
method Reset (line 513) | func (x *StatusCheckResponse) Reset() {
method String (line 520) | func (x *StatusCheckResponse) String() string {
method ProtoMessage (line 524) | func (*StatusCheckResponse) ProtoMessage() {}
method ProtoReflect (line 526) | func (x *StatusCheckResponse) ProtoReflect() protoreflect.Message {
method Descriptor (line 539) | func (*StatusCheckResponse) Descriptor() ([]byte, []int) {
method GetResult (line 543) | func (x *StatusCheckResponse) GetResult() string {
method GetSubStatus (line 550) | func (x *StatusCheckResponse) GetSubStatus() *sub.Status {
method GetSub2Status (line 557) | func (x *StatusCheckResponse) GetSub2Status() *sub2.Status {
function file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZIP (line 761) | func file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZ...
function init (line 814) | func init() { file_examples_internal_proto_examplepb_echo_service_proto_...
function file_examples_internal_proto_examplepb_echo_service_proto_init (line 815) | func file_examples_internal_proto_examplepb_echo_service_proto_init() {
FILE: examples/internal/proto/examplepb/echo_service.pb.gw.go
function request_EchoService_Echo_0 (line 40) | func request_EchoService_Echo_0(ctx context.Context, marshaler runtime.M...
function local_request_EchoService_Echo_0 (line 67) | func local_request_EchoService_Echo_0(ctx context.Context, marshaler run...
function request_EchoService_Echo_1 (line 93) | func request_EchoService_Echo_1(ctx context.Context, marshaler runtime.M...
function local_request_EchoService_Echo_1 (line 128) | func local_request_EchoService_Echo_1(ctx context.Context, marshaler run...
function request_EchoService_Echo_2 (line 162) | func request_EchoService_Echo_2(ctx context.Context, marshaler runtime.M...
function local_request_EchoService_Echo_2 (line 210) | func local_request_EchoService_Echo_2(ctx context.Context, marshaler run...
function request_EchoService_Echo_3 (line 257) | func request_EchoService_Echo_3(ctx context.Context, marshaler runtime.M...
function local_request_EchoService_Echo_3 (line 305) | func local_request_EchoService_Echo_3(ctx context.Context, marshaler run...
function request_EchoService_Echo_4 (line 352) | func request_EchoService_Echo_4(ctx context.Context, marshaler runtime.M...
function local_request_EchoService_Echo_4 (line 379) | func local_request_EchoService_Echo_4(ctx context.Context, marshaler run...
function request_EchoService_Echo_5 (line 405) | func request_EchoService_Echo_5(ctx context.Context, marshaler runtime.M...
function local_request_EchoService_Echo_5 (line 432) | func local_request_EchoService_Echo_5(ctx context.Context, marshaler run...
function request_EchoService_Echo_6 (line 458) | func request_EchoService_Echo_6(ctx context.Context, marshaler runtime.M...
function local_request_EchoService_Echo_6 (line 485) | func local_request_EchoService_Echo_6(ctx context.Context, marshaler run...
function request_EchoService_EchoBody_0 (line 509) | func request_EchoService_EchoBody_0(ctx context.Context, marshaler runti...
function local_request_EchoService_EchoBody_0 (line 524) | func local_request_EchoService_EchoBody_0(ctx context.Context, marshaler...
function request_EchoService_EchoBody_1 (line 538) | func request_EchoService_EchoBody_1(ctx context.Context, marshaler runti...
function local_request_EchoService_EchoBody_1 (line 573) | func local_request_EchoService_EchoBody_1(ctx context.Context, marshaler...
function request_EchoService_EchoDelete_0 (line 607) | func request_EchoService_EchoDelete_0(ctx context.Context, marshaler run...
function local_request_EchoService_EchoDelete_0 (line 625) | func local_request_EchoService_EchoDelete_0(ctx context.Context, marshal...
function request_EchoService_EchoPatch_0 (line 642) | func request_EchoService_EchoPatch_0(ctx context.Context, marshaler runt...
function local_request_EchoService_EchoPatch_0 (line 674) | func local_request_EchoService_EchoPatch_0(ctx context.Context, marshale...
function request_EchoService_EchoUnauthorized_0 (line 705) | func request_EchoService_EchoUnauthorized_0(ctx context.Context, marshal...
function local_request_EchoService_EchoUnauthorized_0 (line 723) | func local_request_EchoService_EchoUnauthorized_0(ctx context.Context, m...
function request_EchoService_EchoStatus_0 (line 738) | func request_EchoService_EchoStatus_0(ctx context.Context, marshaler run...
function local_request_EchoService_EchoStatus_0 (line 753) | func local_request_EchoService_EchoStatus_0(ctx context.Context, marshal...
function RegisterEchoServiceHandlerServer (line 770) | func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime....
function RegisterEchoServiceHandlerFromEndpoint (line 1037) | func RegisterEchoServiceHandlerFromEndpoint(ctx context.Context, mux *ru...
function RegisterEchoServiceHandler (line 1061) | func RegisterEchoServiceHandler(ctx context.Context, mux *runtime.ServeM...
function RegisterEchoServiceHandlerClient (line 1070) | func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime....
FILE: examples/internal/proto/examplepb/echo_service_grpc.pb.go
constant _ (line 24) | _ = grpc.SupportPackageIsVersion9
constant EchoService_Echo_FullMethodName (line 27) | EchoService_Echo_FullMethodName = "/grpc.gateway.examples.in...
constant EchoService_EchoBody_FullMethodName (line 28) | EchoService_EchoBody_FullMethodName = "/grpc.gateway.examples.in...
constant EchoService_EchoDelete_FullMethodName (line 29) | EchoService_EchoDelete_FullMethodName = "/grpc.gateway.examples.in...
constant EchoService_EchoPatch_FullMethodName (line 30) | EchoService_EchoPatch_FullMethodName = "/grpc.gateway.examples.in...
constant EchoService_EchoUnauthorized_FullMethodName (line 31) | EchoService_EchoUnauthorized_FullMethodName = "/grpc.gateway.examples.in...
constant EchoService_EchoStatus_FullMethodName (line 32) | EchoService_EchoStatus_FullMethodName = "/grpc.gateway.examples.in...
type EchoServiceClient (line 40) | type EchoServiceClient interface
type echoServiceClient (line 62) | type echoServiceClient struct
method Echo (line 70) | func (c *echoServiceClient) Echo(ctx context.Context, in *SimpleMessag...
method EchoBody (line 80) | func (c *echoServiceClient) EchoBody(ctx context.Context, in *SimpleMe...
method EchoDelete (line 90) | func (c *echoServiceClient) EchoDelete(ctx context.Context, in *Simple...
method EchoPatch (line 100) | func (c *echoServiceClient) EchoPatch(ctx context.Context, in *Dynamic...
method EchoUnauthorized (line 110) | func (c *echoServiceClient) EchoUnauthorized(ctx context.Context, in *...
method EchoStatus (line 120) | func (c *echoServiceClient) EchoStatus(ctx context.Context, in *Status...
function NewEchoServiceClient (line 66) | func NewEchoServiceClient(cc grpc.ClientConnInterface) EchoServiceClient {
type EchoServiceServer (line 135) | type EchoServiceServer interface
type UnimplementedEchoServiceServer (line 162) | type UnimplementedEchoServiceServer struct
method Echo (line 164) | func (UnimplementedEchoServiceServer) Echo(context.Context, *SimpleMes...
method EchoBody (line 167) | func (UnimplementedEchoServiceServer) EchoBody(context.Context, *Simpl...
method EchoDelete (line 170) | func (UnimplementedEchoServiceServer) EchoDelete(context.Context, *Sim...
method EchoPatch (line 173) | func (UnimplementedEchoServiceServer) EchoPatch(context.Context, *Dyna...
method EchoUnauthorized (line 176) | func (UnimplementedEchoServiceServer) EchoUnauthorized(context.Context...
method EchoStatus (line 179) | func (UnimplementedEchoServiceServer) EchoStatus(context.Context, *Sta...
method testEmbeddedByValue (line 182) | func (UnimplementedEchoServiceServer) testEmbeddedByValue() {}
type UnsafeEchoServiceServer (line 187) | type UnsafeEchoServiceServer interface
function RegisterEchoServiceServer (line 191) | func RegisterEchoServiceServer(s grpc.ServiceRegistrar, srv EchoServiceS...
function _EchoService_Echo_Handler (line 202) | func _EchoService_Echo_Handler(srv interface{}, ctx context.Context, dec...
function _EchoService_EchoBody_Handler (line 220) | func _EchoService_EchoBody_Handler(srv interface{}, ctx context.Context,...
function _EchoService_EchoDelete_Handler (line 238) | func _EchoService_EchoDelete_Handler(srv interface{}, ctx context.Contex...
function _EchoService_EchoPatch_Handler (line 256) | func _EchoService_EchoPatch_Handler(srv interface{}, ctx context.Context...
function _EchoService_EchoUnauthorized_Handler (line 274) | func _EchoService_EchoUnauthorized_Handler(srv interface{}, ctx context....
function _EchoService_EchoStatus_Handler (line 292) | func _EchoService_EchoStatus_Handler(srv interface{}, ctx context.Contex...
FILE: examples/internal/proto/examplepb/enum_with_single_value.pb.go
constant _ (line 19) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 21) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type EnumWithSingleValue (line 27) | type EnumWithSingleValue
method Enum (line 43) | func (x EnumWithSingleValue) Enum() *EnumWithSingleValue {
method String (line 49) | func (x EnumWithSingleValue) String() string {
method Descriptor (line 53) | func (EnumWithSingleValue) Descriptor() protoreflect.EnumDescriptor {
method Type (line 57) | func (EnumWithSingleValue) Type() protoreflect.EnumType {
method Number (line 61) | func (x EnumWithSingleValue) Number() protoreflect.EnumNumber {
method EnumDescriptor (line 66) | func (EnumWithSingleValue) EnumDescriptor() ([]byte, []int) {
constant EnumWithSingleValue_ENUM_WITH_SINGLE_VALUE_UNSPECIFIED (line 30) | EnumWithSingleValue_ENUM_WITH_SINGLE_VALUE_UNSPECIFIED EnumWithSingleVal...
type EnumWithSingleValueServiceEchoRequest (line 70) | type EnumWithSingleValueServiceEchoRequest struct
method Reset (line 78) | func (x *EnumWithSingleValueServiceEchoRequest) Reset() {
method String (line 85) | func (x *EnumWithSingleValueServiceEchoRequest) String() string {
method ProtoMessage (line 89) | func (*EnumWithSingleValueServiceEchoRequest) ProtoMessage() {}
method ProtoReflect (line 91) | func (x *EnumWithSingleValueServiceEchoRequest) ProtoReflect() protore...
method Descriptor (line 104) | func (*EnumWithSingleValueServiceEchoRequest) Descriptor() ([]byte, []...
method GetValue (line 108) | func (x *EnumWithSingleValueServiceEchoRequest) GetValue() EnumWithSin...
type EnumWithSingleValueServiceEchoResponse (line 115) | type EnumWithSingleValueServiceEchoResponse struct
method Reset (line 121) | func (x *EnumWithSingleValueServiceEchoResponse) Reset() {
method String (line 128) | func (x *EnumWithSingleValueServiceEchoResponse) String() string {
method ProtoMessage (line 132) | func (*EnumWithSingleValueServiceEchoResponse) ProtoMessage() {}
method ProtoReflect (line 134) | func (x *EnumWithSingleValueServiceEchoResponse) ProtoReflect() protor...
method Descriptor (line 147) | func (*EnumWithSingleValueServiceEchoResponse) Descriptor() ([]byte, [...
function file_examples_internal_proto_examplepb_enum_with_single_value_proto_rawDescGZIP (line 207) | func file_examples_internal_proto_examplepb_enum_with_single_value_proto...
function init (line 232) | func init() { file_examples_internal_proto_examplepb_enum_with_single_va...
function file_examples_internal_proto_examplepb_enum_with_single_value_proto_init (line 233) | func file_examples_internal_proto_examplepb_enum_with_single_value_proto...
FILE: examples/internal/proto/examplepb/enum_with_single_value.pb.gw.go
function request_EnumWithSingleValueService_Echo_0 (line 38) | func request_EnumWithSingleValueService_Echo_0(ctx context.Context, mars...
function local_request_EnumWithSingleValueService_Echo_0 (line 53) | func local_request_EnumWithSingleValueService_Echo_0(ctx context.Context...
function RegisterEnumWithSingleValueServiceHandlerServer (line 70) | func RegisterEnumWithSingleValueServiceHandlerServer(ctx context.Context...
function RegisterEnumWithSingleValueServiceHandlerFromEndpoint (line 97) | func RegisterEnumWithSingleValueServiceHandlerFromEndpoint(ctx context.C...
function RegisterEnumWithSingleValueServiceHandler (line 121) | func RegisterEnumWithSingleValueServiceHandler(ctx context.Context, mux ...
function RegisterEnumWithSingleValueServiceHandlerClient (line 130) | func RegisterEnumWithSingleValueServiceHandlerClient(ctx context.Context...
FILE: examples/internal/proto/examplepb/enum_with_single_value_grpc.pb.go
constant _ (line 19) | _ = grpc.SupportPackageIsVersion9
constant EnumWithSingleValueService_Echo_FullMethodName (line 22) | EnumWithSingleValueService_Echo_FullMethodName = "/grpc.gateway.examples...
type EnumWithSingleValueServiceClient (line 28) | type EnumWithSingleValueServiceClient interface
type enumWithSingleValueServiceClient (line 32) | type enumWithSingleValueServiceClient struct
method Echo (line 40) | func (c *enumWithSingleValueServiceClient) Echo(ctx context.Context, i...
function NewEnumWithSingleValueServiceClient (line 36) | func NewEnumWithSingleValueServiceClient(cc grpc.ClientConnInterface) En...
type EnumWithSingleValueServiceServer (line 53) | type EnumWithSingleValueServiceServer interface
type UnimplementedEnumWithSingleValueServiceServer (line 62) | type UnimplementedEnumWithSingleValueServiceServer struct
method Echo (line 64) | func (UnimplementedEnumWithSingleValueServiceServer) Echo(context.Cont...
method testEmbeddedByValue (line 67) | func (UnimplementedEnumWithSingleValueServiceServer) testEmbeddedByVal...
type UnsafeEnumWithSingleValueServiceServer (line 72) | type UnsafeEnumWithSingleValueServiceServer interface
function RegisterEnumWithSingleValueServiceServer (line 76) | func RegisterEnumWithSingleValueServiceServer(s grpc.ServiceRegistrar, s...
function _EnumWithSingleValueService_Echo_Handler (line 87) | func _EnumWithSingleValueService_Echo_Handler(srv interface{}, ctx conte...
FILE: examples/internal/proto/examplepb/excess_body.pb.go
constant _ (line 23) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 25) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
function init (line 96) | func init() { file_examples_internal_proto_examplepb_excess_body_proto_i...
function file_examples_internal_proto_examplepb_excess_body_proto_init (line 97) | func file_examples_internal_proto_examplepb_excess_body_proto_init() {
FILE: examples/internal/proto/examplepb/excess_body.pb.gw.go
function request_ExcessBodyService_NoBodyRpc_0 (line 39) | func request_ExcessBodyService_NoBodyRpc_0(ctx context.Context, marshale...
function local_request_ExcessBodyService_NoBodyRpc_0 (line 51) | func local_request_ExcessBodyService_NoBodyRpc_0(ctx context.Context, ma...
function request_ExcessBodyService_NoBodyServerStream_0 (line 60) | func request_ExcessBodyService_NoBodyServerStream_0(ctx context.Context,...
function request_ExcessBodyService_WithBodyRpc_0 (line 80) | func request_ExcessBodyService_WithBodyRpc_0(ctx context.Context, marsha...
function local_request_ExcessBodyService_WithBodyRpc_0 (line 95) | func local_request_ExcessBodyService_WithBodyRpc_0(ctx context.Context, ...
function request_ExcessBodyService_WithBodyServerStream_0 (line 107) | func request_ExcessBodyService_WithBodyServerStream_0(ctx context.Contex...
function RegisterExcessBodyServiceHandlerServer (line 135) | func RegisterExcessBodyServiceHandlerServer(ctx context.Context, mux *ru...
function RegisterExcessBodyServiceHandlerFromEndpoint (line 196) | func RegisterExcessBodyServiceHandlerFromEndpoint(ctx context.Context, m...
function RegisterExcessBodyServiceHandler (line 220) | func RegisterExcessBodyServiceHandler(ctx context.Context, mux *runtime....
function RegisterExcessBodyServiceHandlerClient (line 229) | func RegisterExcessBodyServiceHandlerClient(ctx context.Context, mux *ru...
FILE: examples/internal/proto/examplepb/excess_body_grpc.pb.go
constant _ (line 24) | _ = grpc.SupportPackageIsVersion9
constant ExcessBodyService_NoBodyRpc_FullMethodName (line 27) | ExcessBodyService_NoBodyRpc_FullMethodName = "/grpc.gateway.e...
constant ExcessBodyService_NoBodyServerStream_FullMethodName (line 28) | ExcessBodyService_NoBodyServerStream_FullMethodName = "/grpc.gateway.e...
constant ExcessBodyService_WithBodyRpc_FullMethodName (line 29) | ExcessBodyService_WithBodyRpc_FullMethodName = "/grpc.gateway.e...
constant ExcessBodyService_WithBodyServerStream_FullMethodName (line 30) | ExcessBodyService_WithBodyServerStream_FullMethodName = "/grpc.gateway.e...
type ExcessBodyServiceClient (line 36) | type ExcessBodyServiceClient interface
type excessBodyServiceClient (line 43) | type excessBodyServiceClient struct
method NoBodyRpc (line 51) | func (c *excessBodyServiceClient) NoBodyRpc(ctx context.Context, in *e...
method NoBodyServerStream (line 61) | func (c *excessBodyServiceClient) NoBodyServerStream(ctx context.Conte...
method WithBodyRpc (line 80) | func (c *excessBodyServiceClient) WithBodyRpc(ctx context.Context, in ...
method WithBodyServerStream (line 90) | func (c *excessBodyServiceClient) WithBodyServerStream(ctx context.Con...
function NewExcessBodyServiceClient (line 47) | func NewExcessBodyServiceClient(cc grpc.ClientConnInterface) ExcessBodyS...
type ExcessBodyServiceServer (line 112) | type ExcessBodyServiceServer interface
type UnimplementedExcessBodyServiceServer (line 124) | type UnimplementedExcessBodyServiceServer struct
method NoBodyRpc (line 126) | func (UnimplementedExcessBodyServiceServer) NoBodyRpc(context.Context,...
method NoBodyServerStream (line 129) | func (UnimplementedExcessBodyServiceServer) NoBodyServerStream(*emptyp...
method WithBodyRpc (line 132) | func (UnimplementedExcessBodyServiceServer) WithBodyRpc(context.Contex...
method WithBodyServerStream (line 135) | func (UnimplementedExcessBodyServiceServer) WithBodyServerStream(*empt...
method testEmbeddedByValue (line 138) | func (UnimplementedExcessBodyServiceServer) testEmbeddedByValue() {}
type UnsafeExcessBodyServiceServer (line 143) | type UnsafeExcessBodyServiceServer interface
function RegisterExcessBodyServiceServer (line 147) | func RegisterExcessBodyServiceServer(s grpc.ServiceRegistrar, srv Excess...
function _ExcessBodyService_NoBodyRpc_Handler (line 158) | func _ExcessBodyService_NoBodyRpc_Handler(srv interface{}, ctx context.C...
function _ExcessBodyService_NoBodyServerStream_Handler (line 176) | func _ExcessBodyService_NoBodyServerStream_Handler(srv interface{}, stre...
function _ExcessBodyService_WithBodyRpc_Handler (line 187) | func _ExcessBodyService_WithBodyRpc_Handler(srv interface{}, ctx context...
function _ExcessBodyService_WithBodyServerStream_Handler (line 205) | func _ExcessBodyService_WithBodyServerStream_Handler(srv interface{}, st...
FILE: examples/internal/proto/examplepb/flow_combination.pb.go
constant _ (line 19) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 21) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type EmptyProto (line 24) | type EmptyProto struct
method Reset (line 30) | func (x *EmptyProto) Reset() {
method String (line 37) | func (x *EmptyProto) String() string {
method ProtoMessage (line 41) | func (*EmptyProto) ProtoMessage() {}
method ProtoReflect (line 43) | func (x *EmptyProto) ProtoReflect() protoreflect.Message {
method Descriptor (line 56) | func (*EmptyProto) Descriptor() ([]byte, []int) {
type NonEmptyProto (line 60) | type NonEmptyProto struct
method Reset (line 70) | func (x *NonEmptyProto) Reset() {
method String (line 77) | func (x *NonEmptyProto) String() string {
method ProtoMessage (line 81) | func (*NonEmptyProto) ProtoMessage() {}
method ProtoReflect (line 83) | func (x *NonEmptyProto) ProtoReflect() protoreflect.Message {
method Descriptor (line 96) | func (*NonEmptyProto) Descriptor() ([]byte, []int) {
method GetA (line 100) | func (x *NonEmptyProto) GetA() string {
method GetB (line 107) | func (x *NonEmptyProto) GetB() string {
method GetC (line 114) | func (x *NonEmptyProto) GetC() string {
type UnaryProto (line 121) | type UnaryProto struct
method Reset (line 129) | func (x *UnaryProto) Reset() {
method String (line 136) | func (x *UnaryProto) String() string {
method ProtoMessage (line 140) | func (*UnaryProto) ProtoMessage() {}
method ProtoReflect (line 142) | func (x *UnaryProto) ProtoReflect() protoreflect.Message {
method Descriptor (line 155) | func (*UnaryProto) Descriptor() ([]byte, []int) {
method GetStr (line 159) | func (x *UnaryProto) GetStr() string {
type NestedProto (line 166) | type NestedProto struct
method Reset (line 176) | func (x *NestedProto) Reset() {
method String (line 183) | func (x *NestedProto) String() string {
method ProtoMessage (line 187) | func (*NestedProto) ProtoMessage() {}
method ProtoReflect (line 189) | func (x *NestedProto) ProtoReflect() protoreflect.Message {
method Descriptor (line 202) | func (*NestedProto) Descriptor() ([]byte, []int) {
method GetA (line 206) | func (x *NestedProto) GetA() *UnaryProto {
method GetB (line 213) | func (x *NestedProto) GetB() string {
method GetC (line 220) | func (x *NestedProto) GetC() string {
type SingleNestedProto (line 227) | type SingleNestedProto struct
method Reset (line 235) | func (x *SingleNestedProto) Reset() {
method String (line 242) | func (x *SingleNestedProto) String() string {
method ProtoMessage (line 246) | func (*SingleNestedProto) ProtoMessage() {}
method ProtoReflect (line 248) | func (x *SingleNestedProto) ProtoReflect() protoreflect.Message {
method Descriptor (line 261) | func (*SingleNestedProto) Descriptor() ([]byte, []int) {
method GetA (line 265) | func (x *SingleNestedProto) GetA() *UnaryProto {
function file_examples_internal_proto_examplepb_flow_combination_proto_rawDescGZIP (line 460) | func file_examples_internal_proto_examplepb_flow_combination_proto_rawDe...
function init (line 505) | func init() { file_examples_internal_proto_examplepb_flow_combination_pr...
function file_examples_internal_proto_examplepb_flow_combination_proto_init (line 506) | func file_examples_internal_proto_examplepb_flow_combination_proto_init() {
FILE: examples/internal/proto/examplepb/flow_combination.pb.gw.go
function request_FlowCombination_RpcEmptyRpc_0 (line 38) | func request_FlowCombination_RpcEmptyRpc_0(ctx context.Context, marshale...
function local_request_FlowCombination_RpcEmptyRpc_0 (line 50) | func local_request_FlowCombination_RpcEmptyRpc_0(ctx context.Context, ma...
function request_FlowCombination_RpcEmptyStream_0 (line 59) | func request_FlowCombination_RpcEmptyStream_0(ctx context.Context, marsh...
function request_FlowCombination_StreamEmptyRpc_0 (line 79) | func request_FlowCombination_StreamEmptyRpc_0(ctx context.Context, marsh...
function request_FlowCombination_StreamEmptyStream_0 (line 120) | func request_FlowCombination_StreamEmptyStream_0(ctx context.Context, ma...
function request_FlowCombination_RpcBodyRpc_0 (line 163) | func request_FlowCombination_RpcBodyRpc_0(ctx context.Context, marshaler...
function local_request_FlowCombination_RpcBodyRpc_0 (line 178) | func local_request_FlowCombination_RpcBodyRpc_0(ctx context.Context, mar...
function request_FlowCombination_RpcBodyRpc_1 (line 190) | func request_FlowCombination_RpcBodyRpc_1(ctx context.Context, marshaler...
function local_request_FlowCombination_RpcBodyRpc_1 (line 227) | func local_request_FlowCombination_RpcBodyRpc_1(ctx context.Context, mar...
function request_FlowCombination_RpcBodyRpc_2 (line 263) | func request_FlowCombination_RpcBodyRpc_2(ctx context.Context, marshaler...
function local_request_FlowCombination_RpcBodyRpc_2 (line 281) | func local_request_FlowCombination_RpcBodyRpc_2(ctx context.Context, mar...
function request_FlowCombination_RpcBodyRpc_3 (line 296) | func request_FlowCombination_RpcBodyRpc_3(ctx context.Context, marshaler...
function local_request_FlowCombination_RpcBodyRpc_3 (line 328) | func local_request_FlowCombination_RpcBodyRpc_3(ctx context.Context, mar...
function request_FlowCombination_RpcBodyRpc_4 (line 359) | func request_FlowCombination_RpcBodyRpc_4(ctx context.Context, marshaler...
function local_request_FlowCombination_RpcBodyRpc_4 (line 380) | func local_request_FlowCombination_RpcBodyRpc_4(ctx context.Context, mar...
function request_FlowCombination_RpcBodyRpc_5 (line 400) | func request_FlowCombination_RpcBodyRpc_5(ctx context.Context, marshaler...
function local_request_FlowCombination_RpcBodyRpc_5 (line 430) | func local_request_FlowCombination_RpcBodyRpc_5(ctx context.Context, mar...
function request_FlowCombination_RpcBodyRpc_6 (line 459) | func request_FlowCombination_RpcBodyRpc_6(ctx context.Context, marshaler...
function local_request_FlowCombination_RpcBodyRpc_6 (line 486) | func local_request_FlowCombination_RpcBodyRpc_6(ctx context.Context, mar...
function request_FlowCombination_RpcPathSingleNestedRpc_0 (line 512) | func request_FlowCombination_RpcPathSingleNestedRpc_0(ctx context.Contex...
function local_request_FlowCombination_RpcPathSingleNestedRpc_0 (line 539) | func local_request_FlowCombination_RpcPathSingleNestedRpc_0(ctx context....
function request_FlowCombination_RpcPathNestedRpc_0 (line 565) | func request_FlowCombination_RpcPathNestedRpc_0(ctx context.Context, mar...
function local_request_FlowCombination_RpcPathNestedRpc_0 (line 603) | func local_request_FlowCombination_RpcPathNestedRpc_0(ctx context.Contex...
function request_FlowCombination_RpcPathNestedRpc_1 (line 640) | func request_FlowCombination_RpcPathNestedRpc_1(ctx context.Context, mar...
function local_request_FlowCombination_RpcPathNestedRpc_1 (line 667) | func local_request_FlowCombination_RpcPathNestedRpc_1(ctx context.Contex...
function request_FlowCombination_RpcPathNestedRpc_2 (line 693) | func request_FlowCombination_RpcPathNestedRpc_2(ctx context.Context, mar...
function local_request_FlowCombination_RpcPathNestedRpc_2 (line 723) | func local_request_FlowCombination_RpcPathNestedRpc_2(ctx context.Contex...
function request_FlowCombination_RpcBodyStream_0 (line 750) | func request_FlowCombination_RpcBodyStream_0(ctx context.Context, marsha...
function request_FlowCombination_RpcBodyStream_1 (line 773) | func request_FlowCombination_RpcBodyStream_1(ctx context.Context, marsha...
function request_FlowCombination_RpcBodyStream_2 (line 820) | func request_FlowCombination_RpcBodyStream_2(ctx context.Context, marsha...
function request_FlowCombination_RpcBodyStream_3 (line 846) | func request_FlowCombination_RpcBodyStream_3(ctx context.Context, marsha...
function request_FlowCombination_RpcBodyStream_4 (line 888) | func request_FlowCombination_RpcBodyStream_4(ctx context.Context, marsha...
function request_FlowCombination_RpcBodyStream_5 (line 919) | func request_FlowCombination_RpcBodyStream_5(ctx context.Context, marsha...
function request_FlowCombination_RpcBodyStream_6 (line 959) | func request_FlowCombination_RpcBodyStream_6(ctx context.Context, marsha...
function request_FlowCombination_RpcPathSingleNestedStream_0 (line 996) | func request_FlowCombination_RpcPathSingleNestedStream_0(ctx context.Con...
function request_FlowCombination_RpcPathNestedStream_0 (line 1033) | func request_FlowCombination_RpcPathNestedStream_0(ctx context.Context, ...
function request_FlowCombination_RpcPathNestedStream_1 (line 1081) | func request_FlowCombination_RpcPathNestedStream_1(ctx context.Context, ...
function request_FlowCombination_RpcPathNestedStream_2 (line 1118) | func request_FlowCombination_RpcPathNestedStream_2(ctx context.Context, ...
function RegisterFlowCombinationHandlerServer (line 1161) | func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runt...
function RegisterFlowCombinationHandlerFromEndpoint (line 1506) | func RegisterFlowCombinationHandlerFromEndpoint(ctx context.Context, mux...
function RegisterFlowCombinationHandler (line 1530) | func RegisterFlowCombinationHandler(ctx context.Context, mux *runtime.Se...
function RegisterFlowCombinationHandlerClient (line 1539) | func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runt...
FILE: examples/internal/proto/examplepb/flow_combination_grpc.pb.go
constant _ (line 19) | _ = grpc.SupportPackageIsVersion9
constant FlowCombination_RpcEmptyRpc_FullMethodName (line 22) | FlowCombination_RpcEmptyRpc_FullMethodName = "/grpc.gatewa...
constant FlowCombination_RpcEmptyStream_FullMethodName (line 23) | FlowCombination_RpcEmptyStream_FullMethodName = "/grpc.gatewa...
constant FlowCombination_StreamEmptyRpc_FullMethodName (line 24) | FlowCombination_StreamEmptyRpc_FullMethodName = "/grpc.gatewa...
constant FlowCombination_StreamEmptyStream_FullMethodName (line 25) | FlowCombination_StreamEmptyStream_FullMethodName = "/grpc.gatewa...
constant FlowCombination_RpcBodyRpc_FullMethodName (line 26) | FlowCombination_RpcBodyRpc_FullMethodName = "/grpc.gatewa...
constant FlowCombination_RpcPathSingleNestedRpc_FullMethodName (line 27) | FlowCombination_RpcPathSingleNestedRpc_FullMethodName = "/grpc.gatewa...
constant FlowCombination_RpcPathNestedRpc_FullMethodName (line 28) | FlowCombination_RpcPathNestedRpc_FullMethodName = "/grpc.gatewa...
constant FlowCombination_RpcBodyStream_FullMethodName (line 29) | FlowCombination_RpcBodyStream_FullMethodName = "/grpc.gatewa...
constant FlowCombination_RpcPathSingleNestedStream_FullMethodName (line 30) | FlowCombination_RpcPathSingleNestedStream_FullMethodName = "/grpc.gatewa...
constant FlowCombination_RpcPathNestedStream_FullMethodName (line 31) | FlowCombination_RpcPathNestedStream_FullMethodName = "/grpc.gatewa...
type FlowCombinationClient (line 37) | type FlowCombinationClient interface
type flowCombinationClient (line 50) | type flowCombinationClient struct
method RpcEmptyRpc (line 58) | func (c *flowCombinationClient) RpcEmptyRpc(ctx context.Context, in *E...
method RpcEmptyStream (line 68) | func (c *flowCombinationClient) RpcEmptyStream(ctx context.Context, in...
method StreamEmptyRpc (line 87) | func (c *flowCombinationClient) StreamEmptyRpc(ctx context.Context, op...
method StreamEmptyStream (line 100) | func (c *flowCombinationClient) StreamEmptyStream(ctx context.Context,...
method RpcBodyRpc (line 113) | func (c *flowCombinationClient) RpcBodyRpc(ctx context.Context, in *No...
method RpcPathSingleNestedRpc (line 123) | func (c *flowCombinationClient) RpcPathSingleNestedRpc(ctx context.Con...
method RpcPathNestedRpc (line 133) | func (c *flowCombinationClient) RpcPathNestedRpc(ctx context.Context, ...
method RpcBodyStream (line 143) | func (c *flowCombinationClient) RpcBodyStream(ctx context.Context, in ...
method RpcPathSingleNestedStream (line 162) | func (c *flowCombinationClient) RpcPathSingleNestedStream(ctx context....
method RpcPathNestedStream (line 181) | func (c *flowCombinationClient) RpcPathNestedStream(ctx context.Contex...
function NewFlowCombinationClient (line 54) | func NewFlowCombinationClient(cc grpc.ClientConnInterface) FlowCombinati...
type FlowCombinationServer (line 203) | type FlowCombinationServer interface
type UnimplementedFlowCombinationServer (line 221) | type UnimplementedFlowCombinationServer struct
method RpcEmptyRpc (line 223) | func (UnimplementedFlowCombinationServer) RpcEmptyRpc(context.Context,...
method RpcEmptyStream (line 226) | func (UnimplementedFlowCombinationServer) RpcEmptyStream(*EmptyProto, ...
method StreamEmptyRpc (line 229) | func (UnimplementedFlowCombinationServer) StreamEmptyRpc(grpc.ClientSt...
method StreamEmptyStream (line 232) | func (UnimplementedFlowCombinationServer) StreamEmptyStream(grpc.BidiS...
method RpcBodyRpc (line 235) | func (UnimplementedFlowCombinationServer) RpcBodyRpc(context.Context, ...
method RpcPathSingleNestedRpc (line 238) | func (UnimplementedFlowCombinationServer) RpcPathSingleNestedRpc(conte...
method RpcPathNestedRpc (line 241) | func (UnimplementedFlowCombinationServer) RpcPathNestedRpc(context.Con...
method RpcBodyStream (line 244) | func (UnimplementedFlowCombinationServer) RpcBodyStream(*NonEmptyProto...
method RpcPathSingleNestedStream (line 247) | func (UnimplementedFlowCombinationServer) RpcPathSingleNestedStream(*S...
method RpcPathNestedStream (line 250) | func (UnimplementedFlowCombinationServer) RpcPathNestedStream(*NestedP...
method testEmbeddedByValue (line 253) | func (UnimplementedFlowCombinationServer) testEmbeddedByValue() {}
type UnsafeFlowCombinationServer (line 258) | type UnsafeFlowCombinationServer interface
function RegisterFlowCombinationServer (line 262) | func RegisterFlowCombinationServer(s grpc.ServiceRegistrar, srv FlowComb...
function _FlowCombination_RpcEmptyRpc_Handler (line 273) | func _FlowCombination_RpcEmptyRpc_Handler(srv interface{}, ctx context.C...
function _FlowCombination_RpcEmptyStream_Handler (line 291) | func _FlowCombination_RpcEmptyStream_Handler(srv interface{}, stream grp...
function _FlowCombination_StreamEmptyRpc_Handler (line 302) | func _FlowCombination_StreamEmptyRpc_Handler(srv interface{}, stream grp...
function _FlowCombination_StreamEmptyStream_Handler (line 309) | func _FlowCombination_StreamEmptyStream_Handler(srv interface{}, stream ...
function _FlowCombination_RpcBodyRpc_Handler (line 316) | func _FlowCombination_RpcBodyRpc_Handler(srv interface{}, ctx context.Co...
function _FlowCombination_RpcPathSingleNestedRpc_Handler (line 334) | func _FlowCombination_RpcPathSingleNestedRpc_Handler(srv interface{}, ct...
function _FlowCombination_RpcPathNestedRpc_Handler (line 352) | func _FlowCombination_RpcPathNestedRpc_Handler(srv interface{}, ctx cont...
function _FlowCombination_RpcBodyStream_Handler (line 370) | func _FlowCombination_RpcBodyStream_Handler(srv interface{}, stream grpc...
function _FlowCombination_RpcPathSingleNestedStream_Handler (line 381) | func _FlowCombination_RpcPathSingleNestedStream_Handler(srv interface{},...
function _FlowCombination_RpcPathNestedStream_Handler (line 392) | func _FlowCombination_RpcPathNestedStream_Handler(srv interface{}, strea...
FILE: examples/internal/proto/examplepb/generate_unbound_methods.pb.go
constant _ (line 25) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 27) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type GenerateUnboundMethodsSimpleMessage (line 31) | type GenerateUnboundMethodsSimpleMessage struct
method Reset (line 42) | func (x *GenerateUnboundMethodsSimpleMessage) Reset() {
method String (line 49) | func (x *GenerateUnboundMethodsSimpleMessage) String() string {
method ProtoMessage (line 53) | func (*GenerateUnboundMethodsSimpleMessage) ProtoMessage() {}
method ProtoReflect (line 55) | func (x *GenerateUnboundMethodsSimpleMessage) ProtoReflect() protorefl...
method Descriptor (line 68) | func (*GenerateUnboundMethodsSimpleMessage) Descriptor() ([]byte, []in...
method GetId (line 72) | func (x *GenerateUnboundMethodsSimpleMessage) GetId() string {
method GetNum (line 79) | func (x *GenerateUnboundMethodsSimpleMessage) GetNum() int64 {
method GetDuration (line 86) | func (x *GenerateUnboundMethodsSimpleMessage) GetDuration() *durationp...
function file_examples_internal_proto_examplepb_generate_unbound_methods_proto_rawDescGZIP (line 163) | func file_examples_internal_proto_examplepb_generate_unbound_methods_pro...
function init (line 190) | func init() { file_examples_internal_proto_examplepb_generate_unbound_me...
function file_examples_internal_proto_examplepb_generate_unbound_methods_proto_init (line 191) | func file_examples_internal_proto_examplepb_generate_unbound_methods_pro...
FILE: examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go
function request_GenerateUnboundMethodsEchoService_Echo_0 (line 38) | func request_GenerateUnboundMethodsEchoService_Echo_0(ctx context.Contex...
function local_request_GenerateUnboundMethodsEchoService_Echo_0 (line 53) | func local_request_GenerateUnboundMethodsEchoService_Echo_0(ctx context....
function request_GenerateUnboundMethodsEchoService_EchoBody_0 (line 65) | func request_GenerateUnboundMethodsEchoService_EchoBody_0(ctx context.Co...
function local_request_GenerateUnboundMethodsEchoService_EchoBody_0 (line 80) | func local_request_GenerateUnboundMethodsEchoService_EchoBody_0(ctx cont...
function request_GenerateUnboundMethodsEchoService_EchoDelete_0 (line 92) | func request_GenerateUnboundMethodsEchoService_EchoDelete_0(ctx context....
function local_request_GenerateUnboundMethodsEchoService_EchoDelete_0 (line 107) | func local_request_GenerateUnboundMethodsEchoService_EchoDelete_0(ctx co...
function RegisterGenerateUnboundMethodsEchoServiceHandlerServer (line 124) | func RegisterGenerateUnboundMethodsEchoServiceHandlerServer(ctx context....
function RegisterGenerateUnboundMethodsEchoServiceHandlerFromEndpoint (line 191) | func RegisterGenerateUnboundMethodsEchoServiceHandlerFromEndpoint(ctx co...
function RegisterGenerateUnboundMethodsEchoServiceHandler (line 215) | func RegisterGenerateUnboundMethodsEchoServiceHandler(ctx context.Contex...
function RegisterGenerateUnboundMethodsEchoServiceHandlerClient (line 224) | func RegisterGenerateUnboundMethodsEchoServiceHandlerClient(ctx context....
FILE: examples/internal/proto/examplepb/generate_unbound_methods_grpc.pb.go
constant _ (line 25) | _ = grpc.SupportPackageIsVersion9
constant GenerateUnboundMethodsEchoService_Echo_FullMethodName (line 28) | GenerateUnboundMethodsEchoService_Echo_FullMethodName = "/grpc.gat...
constant GenerateUnboundMethodsEchoService_EchoBody_FullMethodName (line 29) | GenerateUnboundMethodsEchoService_EchoBody_FullMethodName = "/grpc.gat...
constant GenerateUnboundMethodsEchoService_EchoDelete_FullMethodName (line 30) | GenerateUnboundMethodsEchoService_EchoDelete_FullMethodName = "/grpc.gat...
type GenerateUnboundMethodsEchoServiceClient (line 38) | type GenerateUnboundMethodsEchoServiceClient interface
type generateUnboundMethodsEchoServiceClient (line 50) | type generateUnboundMethodsEchoServiceClient struct
method Echo (line 58) | func (c *generateUnboundMethodsEchoServiceClient) Echo(ctx context.Con...
method EchoBody (line 68) | func (c *generateUnboundMethodsEchoServiceClient) EchoBody(ctx context...
method EchoDelete (line 78) | func (c *generateUnboundMethodsEchoServiceClient) EchoDelete(ctx conte...
function NewGenerateUnboundMethodsEchoServiceClient (line 54) | func NewGenerateUnboundMethodsEchoServiceClient(cc grpc.ClientConnInterf...
type GenerateUnboundMethodsEchoServiceServer (line 93) | type GenerateUnboundMethodsEchoServiceServer interface
type UnimplementedGenerateUnboundMethodsEchoServiceServer (line 110) | type UnimplementedGenerateUnboundMethodsEchoServiceServer struct
method Echo (line 112) | func (UnimplementedGenerateUnboundMethodsEchoServiceServer) Echo(conte...
method EchoBody (line 115) | func (UnimplementedGenerateUnboundMethodsEchoServiceServer) EchoBody(c...
method EchoDelete (line 118) | func (UnimplementedGenerateUnboundMethodsEchoServiceServer) EchoDelete...
method testEmbeddedByValue (line 121) | func (UnimplementedGenerateUnboundMethodsEchoServiceServer) testEmbedd...
type UnsafeGenerateUnboundMethodsEchoServiceServer (line 126) | type UnsafeGenerateUnboundMethodsEchoServiceServer interface
function RegisterGenerateUnboundMethodsEchoServiceServer (line 130) | func RegisterGenerateUnboundMethodsEchoServiceServer(s grpc.ServiceRegis...
function _GenerateUnboundMethodsEchoService_Echo_Handler (line 141) | func _GenerateUnboundMethodsEchoService_Echo_Handler(srv interface{}, ct...
function _GenerateUnboundMethodsEchoService_EchoBody_Handler (line 159) | func _GenerateUnboundMethodsEchoService_EchoBody_Handler(srv interface{}...
function _GenerateUnboundMethodsEchoService_EchoDelete_Handler (line 177) | func _GenerateUnboundMethodsEchoService_EchoDelete_Handler(srv interface...
FILE: examples/internal/proto/examplepb/ignore_comment.pb.go
constant _ (line 20) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 22) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type FooRequest (line 26) | type FooRequest struct
method Reset (line 37) | func (x *FooRequest) Reset() {
method String (line 44) | func (x *FooRequest) String() string {
method ProtoMessage (line 48) | func (*FooRequest) ProtoMessage() {}
method ProtoReflect (line 50) | func (x *FooRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 63) | func (*FooRequest) Descriptor() ([]byte, []int) {
method GetUsername (line 67) | func (x *FooRequest) GetUsername() string {
method GetPassword (line 74) | func (x *FooRequest) GetPassword() string {
type FooReply (line 82) | type FooReply struct
method Reset (line 88) | func (x *FooReply) Reset() {
method String (line 95) | func (x *FooReply) String() string {
method ProtoMessage (line 99) | func (*FooReply) ProtoMessage() {}
method ProtoReflect (line 101) | func (x *FooReply) ProtoReflect() protoreflect.Message {
method Descriptor (line 114) | func (*FooReply) Descriptor() ([]byte, []int) {
function file_examples_internal_proto_examplepb_ignore_comment_proto_rawDescGZIP (line 166) | func file_examples_internal_proto_examplepb_ignore_comment_proto_rawDesc...
function init (line 188) | func init() { file_examples_internal_proto_examplepb_ignore_comment_prot...
function file_examples_internal_proto_examplepb_ignore_comment_proto_init (line 189) | func file_examples_internal_proto_examplepb_ignore_comment_proto_init() {
FILE: examples/internal/proto/examplepb/ignore_comment.pb.gw.go
function request_FooService_Foo_0 (line 38) | func request_FooService_Foo_0(ctx context.Context, marshaler runtime.Mar...
function local_request_FooService_Foo_0 (line 53) | func local_request_FooService_Foo_0(ctx context.Context, marshaler runti...
function RegisterFooServiceHandlerServer (line 70) | func RegisterFooServiceHandlerServer(ctx context.Context, mux *runtime.S...
function RegisterFooServiceHandlerFromEndpoint (line 97) | func RegisterFooServiceHandlerFromEndpoint(ctx context.Context, mux *run...
function RegisterFooServiceHandler (line 121) | func RegisterFooServiceHandler(ctx context.Context, mux *runtime.ServeMu...
function RegisterFooServiceHandlerClient (line 130) | func RegisterFooServiceHandlerClient(ctx context.Context, mux *runtime.S...
FILE: examples/internal/proto/examplepb/ignore_comment_grpc.pb.go
constant _ (line 19) | _ = grpc.SupportPackageIsVersion9
constant FooService_Foo_FullMethodName (line 22) | FooService_Foo_FullMethodName = "/grpc.gateway.examples.internal.proto.e...
type FooServiceClient (line 30) | type FooServiceClient interface
type fooServiceClient (line 35) | type fooServiceClient struct
method Foo (line 43) | func (c *fooServiceClient) Foo(ctx context.Context, in *FooRequest, op...
function NewFooServiceClient (line 39) | func NewFooServiceClient(cc grpc.ClientConnInterface) FooServiceClient {
type FooServiceServer (line 58) | type FooServiceServer interface
type UnimplementedFooServiceServer (line 68) | type UnimplementedFooServiceServer struct
method Foo (line 70) | func (UnimplementedFooServiceServer) Foo(context.Context, *FooRequest)...
method testEmbeddedByValue (line 73) | func (UnimplementedFooServiceServer) testEmbeddedByValue() {}
type UnsafeFooServiceServer (line 78) | type UnsafeFooServiceServer interface
function RegisterFooServiceServer (line 82) | func RegisterFooServiceServer(s grpc.ServiceRegistrar, srv FooServiceSer...
function _FooService_Foo_Handler (line 93) | func _FooService_Foo_Handler(srv interface{}, ctx context.Context, dec f...
FILE: examples/internal/proto/examplepb/non_standard_names.pb.go
constant _ (line 20) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 22) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type NonStandardMessage (line 26) | type NonStandardMessage struct
method Reset (line 42) | func (x *NonStandardMessage) Reset() {
method String (line 49) | func (x *NonStandardMessage) String() string {
method ProtoMessage (line 53) | func (*NonStandardMessage) ProtoMessage() {}
method ProtoReflect (line 55) | func (x *NonStandardMessage) ProtoReflect() protoreflect.Message {
method Descriptor (line 68) | func (*NonStandardMessage) Descriptor() ([]byte, []int) {
method GetId (line 72) | func (x *NonStandardMessage) GetId() string {
method GetNum (line 79) | func (x *NonStandardMessage) GetNum() int64 {
method GetLineNum (line 86) | func (x *NonStandardMessage) GetLineNum() int64 {
method GetLangIdent (line 93) | func (x *NonStandardMessage) GetLangIdent() string {
method GetSTATUS (line 100) | func (x *NonStandardMessage) GetSTATUS() string {
method GetEn_GB (line 107) | func (x *NonStandardMessage) GetEn_GB() int64 {
method GetNo (line 114) | func (x *NonStandardMessage) GetNo() string {
method GetThing (line 121) | func (x *NonStandardMessage) GetThing() *NonStandardMessage_Thing {
type NonStandardUpdateRequest (line 128) | type NonStandardUpdateRequest struct
method Reset (line 137) | func (x *NonStandardUpdateRequest) Reset() {
method String (line 144) | func (x *NonStandardUpdateRequest) String() string {
method ProtoMessage (line 148) | func (*NonStandardUpdateRequest) ProtoMessage() {}
method ProtoReflect (line 150) | func (x *NonStandardUpdateRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 163) | func (*NonStandardUpdateRequest) Descriptor() ([]byte, []int) {
method GetBody (line 167) | func (x *NonStandardUpdateRequest) GetBody() *NonStandardMessage {
method GetUpdateMask (line 174) | func (x *NonStandardUpdateRequest) GetUpdateMask() *fieldmaskpb.FieldM...
type NonStandardMessageWithJSONNames (line 182) | type NonStandardMessageWithJSONNames struct
method Reset (line 198) | func (x *NonStandardMessageWithJSONNames) Reset() {
method String (line 205) | func (x *NonStandardMessageWithJSONNames) String() string {
method ProtoMessage (line 209) | func (*NonStandardMessageWithJSONNames) ProtoMessage() {}
method ProtoReflect (line 211) | func (x *NonStandardMessageWithJSONNames) ProtoReflect() protoreflect....
method Descriptor (line 224) | func (*NonStandardMessageWithJSONNames) Descriptor() ([]byte, []int) {
method GetId (line 228) | func (x *NonStandardMessageWithJSONNames) GetId() string {
method GetNum (line 235) | func (x *NonStandardMessageWithJSONNames) GetNum() int64 {
method GetLineNum (line 242) | func (x *NonStandardMessageWithJSONNames) GetLineNum() int64 {
method GetLangIdent (line 249) | func (x *NonStandardMessageWithJSONNames) GetLangIdent() string {
method GetSTATUS (line 256) | func (x *NonStandardMessageWithJSONNames) GetSTATUS() string {
method GetEn_GB (line 263) | func (x *NonStandardMessageWithJSONNames) GetEn_GB() int64 {
method GetNo (line 270) | func (x *NonStandardMessageWithJSONNames) GetNo() string {
method GetThing (line 277) | func (x *NonStandardMessageWithJSONNames) GetThing() *NonStandardMessa...
type NonStandardWithJSONNamesUpdateRequest (line 284) | type NonStandardWithJSONNamesUpdateRequest struct
method Reset (line 293) | func (x *NonStandardWithJSONNamesUpdateRequest) Reset() {
method String (line 300) | func (x *NonStandardWithJSONNamesUpdateRequest) String() string {
method ProtoMessage (line 304) | func (*NonStandardWithJSONNamesUpdateRequest) ProtoMessage() {}
method ProtoReflect (line 306) | func (x *NonStandardWithJSONNamesUpdateRequest) ProtoReflect() protore...
method Descriptor (line 319) | func (*NonStandardWithJSONNamesUpdateRequest) Descriptor() ([]byte, []...
method GetBody (line 323) | func (x *NonStandardWithJSONNamesUpdateRequest) GetBody() *NonStandard...
method GetUpdateMask (line 330) | func (x *NonStandardWithJSONNamesUpdateRequest) GetUpdateMask() *field...
type NonStandardMessage_Thing (line 337) | type NonStandardMessage_Thing struct
method Reset (line 345) | func (x *NonStandardMessage_Thing) Reset() {
method String (line 352) | func (x *NonStandardMessage_Thing) String() string {
method ProtoMessage (line 356) | func (*NonStandardMessage_Thing) ProtoMessage() {}
method ProtoReflect (line 358) | func (x *NonStandardMessage_Thing) ProtoReflect() protoreflect.Message {
method Descriptor (line 371) | func (*NonStandardMessage_Thing) Descriptor() ([]byte, []int) {
method GetSubThing (line 375) | func (x *NonStandardMessage_Thing) GetSubThing() *NonStandardMessage_T...
type NonStandardMessage_Thing_SubThing (line 382) | type NonStandardMessage_Thing_SubThing struct
method Reset (line 390) | func (x *NonStandardMessage_Thing_SubThing) Reset() {
method String (line 397) | func (x *NonStandardMessage_Thing_SubThing) String() string {
method ProtoMessage (line 401) | func (*NonStandardMessage_Thing_SubThing) ProtoMessage() {}
method ProtoReflect (line 403) | func (x *NonStandardMessage_Thing_SubThing) ProtoReflect() protoreflec...
method Descriptor (line 416) | func (*NonStandardMessage_Thing_SubThing) Descriptor() ([]byte, []int) {
method GetSubValue (line 420) | func (x *NonStandardMessage_Thing_SubThing) GetSubValue() string {
type NonStandardMessageWithJSONNames_Thing (line 427) | type NonStandardMessageWithJSONNames_Thing struct
method Reset (line 435) | func (x *NonStandardMessageWithJSONNames_Thing) Reset() {
method String (line 442) | func (x *NonStandardMessageWithJSONNames_Thing) String() string {
method ProtoMessage (line 446) | func (*NonStandardMessageWithJSONNames_Thing) ProtoMessage() {}
method ProtoReflect (line 448) | func (x *NonStandardMessageWithJSONNames_Thing) ProtoReflect() protore...
method Descriptor (line 461) | func (*NonStandardMessageWithJSONNames_Thing) Descriptor() ([]byte, []...
method GetSubThing (line 465) | func (x *NonStandardMessageWithJSONNames_Thing) GetSubThing() *NonStan...
type NonStandardMessageWithJSONNames_Thing_SubThing (line 472) | type NonStandardMessageWithJSONNames_Thing_SubThing struct
method Reset (line 480) | func (x *NonStandardMessageWithJSONNames_Thing_SubThing) Reset() {
method String (line 487) | func (x *NonStandardMessageWithJSONNames_Thing_SubThing) String() stri...
method ProtoMessage (line 491) | func (*NonStandardMessageWithJSONNames_Thing_SubThing) ProtoMessage() {}
method ProtoReflect (line 493) | func (x *NonStandardMessageWithJSONNames_Thing_SubThing) ProtoReflect(...
method Descriptor (line 506) | func (*NonStandardMessageWithJSONNames_Thing_SubThing) Descriptor() ([...
method GetSubValue (line 510) | func (x *NonStandardMessageWithJSONNames_Thing_SubThing) GetSubValue()...
function file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP (line 654) | func file_examples_internal_proto_examplepb_non_standard_names_proto_raw...
function init (line 693) | func init() { file_examples_internal_proto_examplepb_non_standard_names_...
function file_examples_internal_proto_examplepb_non_standard_names_proto_init (line 694) | func file_examples_internal_proto_examplepb_non_standard_names_proto_ini...
FILE: examples/internal/proto/examplepb/non_standard_names.pb.gw.go
function request_NonStandardService_Update_0 (line 40) | func request_NonStandardService_Update_0(ctx context.Context, marshaler ...
function local_request_NonStandardService_Update_0 (line 72) | func local_request_NonStandardService_Update_0(ctx context.Context, mars...
function request_NonStandardService_UpdateWithJSONNames_0 (line 103) | func request_NonStandardService_UpdateWithJSONNames_0(ctx context.Contex...
function local_request_NonStandardService_UpdateWithJSONNames_0 (line 135) | func local_request_NonStandardService_UpdateWithJSONNames_0(ctx context....
function RegisterNonStandardServiceHandlerServer (line 169) | func RegisterNonStandardServiceHandlerServer(ctx context.Context, mux *r...
function RegisterNonStandardServiceHandlerFromEndpoint (line 216) | func RegisterNonStandardServiceHandlerFromEndpoint(ctx context.Context, ...
function RegisterNonStandardServiceHandler (line 240) | func RegisterNonStandardServiceHandler(ctx context.Context, mux *runtime...
function RegisterNonStandardServiceHandlerClient (line 249) | func RegisterNonStandardServiceHandlerClient(ctx context.Context, mux *r...
FILE: examples/internal/proto/examplepb/non_standard_names_grpc.pb.go
constant _ (line 19) | _ = grpc.SupportPackageIsVersion9
constant NonStandardService_Update_FullMethodName (line 22) | NonStandardService_Update_FullMethodName = "/grpc.gateway.e...
constant NonStandardService_UpdateWithJSONNames_FullMethodName (line 23) | NonStandardService_UpdateWithJSONNames_FullMethodName = "/grpc.gateway.e...
type NonStandardServiceClient (line 31) | type NonStandardServiceClient interface
type nonStandardServiceClient (line 38) | type nonStandardServiceClient struct
method Update (line 46) | func (c *nonStandardServiceClient) Update(ctx context.Context, in *Non...
method UpdateWithJSONNames (line 56) | func (c *nonStandardServiceClient) UpdateWithJSONNames(ctx context.Con...
function NewNonStandardServiceClient (line 42) | func NewNonStandardServiceClient(cc grpc.ClientConnInterface) NonStandar...
type NonStandardServiceServer (line 71) | type NonStandardServiceServer interface
type UnimplementedNonStandardServiceServer (line 83) | type UnimplementedNonStandardServiceServer struct
method Update (line 85) | func (UnimplementedNonStandardServiceServer) Update(context.Context, *...
method UpdateWithJSONNames (line 88) | func (UnimplementedNonStandardServiceServer) UpdateWithJSONNames(conte...
method testEmbeddedByValue (line 91) | func (UnimplementedNonStandardServiceServer) testEmbeddedByValue() {}
type UnsafeNonStandardServiceServer (line 96) | type UnsafeNonStandardServiceServer interface
function RegisterNonStandardServiceServer (line 100) | func RegisterNonStandardServiceServer(s grpc.ServiceRegistrar, srv NonSt...
function _NonStandardService_Update_Handler (line 111) | func _NonStandardService_Update_Handler(srv interface{}, ctx context.Con...
function _NonStandardService_UpdateWithJSONNames_Handler (line 129) | func _NonStandardService_UpdateWithJSONNames_Handler(srv interface{}, ct...
FILE: examples/internal/proto/examplepb/opaque.pb.go
constant _ (line 24) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 26) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type OpaqueSearchProductsRequest_OpaqueSortOrder (line 29) | type OpaqueSearchProductsRequest_OpaqueSortOrder
method Enum (line 63) | func (x OpaqueSearchProductsRequest_OpaqueSortOrder) Enum() *OpaqueSea...
method String (line 69) | func (x OpaqueSearchProductsRequest_OpaqueSortOrder) String() string {
method Descriptor (line 73) | func (OpaqueSearchProductsRequest_OpaqueSortOrder) Descriptor() protor...
method Type (line 77) | func (OpaqueSearchProductsRequest_OpaqueSortOrder) Type() protoreflect...
method Number (line 81) | func (x OpaqueSearchProductsRequest_OpaqueSortOrder) Number() protoref...
constant OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_UNSPECIFIED (line 32) | OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_UNSPECIFIED OpaqueSe...
constant OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_RELEVANCE (line 33) | OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_RELEVANCE OpaqueSe...
constant OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_PRICE_LOW_TO_HIGH (line 34) | OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_PRICE_LOW_TO_HIGH OpaqueSe...
constant OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_PRICE_HIGH_TO_LOW (line 35) | OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_PRICE_HIGH_TO_LOW OpaqueSe...
constant OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_NEWEST_FIRST (line 36) | OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_NEWEST_FIRST OpaqueSe...
constant OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_RATING (line 37) | OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_RATING OpaqueSe...
constant OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_POPULARITY (line 38) | OpaqueSearchProductsRequest_OPAQUE_SORT_ORDER_POPULARITY OpaqueSe...
type OpaqueAddress_OpaqueAddressType (line 85) | type OpaqueAddress_OpaqueAddressType
method Enum (line 113) | func (x OpaqueAddress_OpaqueAddressType) Enum() *OpaqueAddress_OpaqueA...
method String (line 119) | func (x OpaqueAddress_OpaqueAddressType) String() string {
method Descriptor (line 123) | func (OpaqueAddress_OpaqueAddressType) Descriptor() protoreflect.EnumD...
method Type (line 127) | func (OpaqueAddress_OpaqueAddressType) Type() protoreflect.EnumType {
method Number (line 131) | func (x OpaqueAddress_OpaqueAddressType) Number() protoreflect.EnumNum...
constant OpaqueAddress_OPAQUE_ADDRESS_TYPE_UNSPECIFIED (line 88) | OpaqueAddress_OPAQUE_ADDRESS_TYPE_UNSPECIFIED OpaqueAddress_OpaqueAddres...
constant OpaqueAddress_OPAQUE_ADDRESS_TYPE_RESIDENTIAL (line 89) | OpaqueAddress_OPAQUE_ADDRESS_TYPE_RESIDENTIAL OpaqueAddress_OpaqueAddres...
constant OpaqueAddress_OPAQUE_ADDRESS_TYPE_BUSINESS (line 90) | OpaqueAddress_OPAQUE_ADDRESS_TYPE_BUSINESS OpaqueAddress_OpaqueAddres...
constant OpaqueAddress_OPAQUE_ADDRESS_TYPE_SHIPPING (line 91) | OpaqueAddress_OPAQUE_ADDRESS_TYPE_SHIPPING OpaqueAddress_OpaqueAddres...
constant OpaqueAddress_OPAQUE_ADDRESS_TYPE_BILLING (line 92) | OpaqueAddress_OPAQUE_ADDRESS_TYPE_BILLING OpaqueAddress_OpaqueAddres...
type OpaqueProduct_OpaqueProductStatus (line 135) | type OpaqueProduct_OpaqueProductStatus
method Enum (line 163) | func (x OpaqueProduct_OpaqueProductStatus) Enum() *OpaqueProduct_Opaqu...
method String (line 169) | func (x OpaqueProduct_OpaqueProductStatus) String() string {
method Descriptor (line 173) | func (OpaqueProduct_OpaqueProductStatus) Descriptor() protoreflect.Enu...
method Type (line 177) | func (OpaqueProduct_OpaqueProductStatus) Type() protoreflect.EnumType {
method Number (line 181) | func (x OpaqueProduct_OpaqueProductStatus) Number() protoreflect.EnumN...
constant OpaqueProduct_OPAQUE_PRODUCT_STATUS_UNSPECIFIED (line 138) | OpaqueProduct_OPAQUE_PRODUCT_STATUS_UNSPECIFIED OpaqueProduct_OpaquePro...
constant OpaqueProduct_OPAQUE_PRODUCT_STATUS_DRAFT (line 139) | OpaqueProduct_OPAQUE_PRODUCT_STATUS_DRAFT OpaqueProduct_OpaquePro...
constant OpaqueProduct_OPAQUE_PRODUCT_STATUS_ACTIVE (line 140) | OpaqueProduct_OPAQUE_PRODUCT_STATUS_ACTIVE OpaqueProduct_OpaquePro...
constant OpaqueProduct_OPAQUE_PRODUCT_STATUS_OUT_OF_STOCK (line 141) | OpaqueProduct_OPAQUE_PRODUCT_STATUS_OUT_OF_STOCK OpaqueProduct_OpaquePro...
constant OpaqueProduct_OPAQUE_PRODUCT_STATUS_DISCONTINUED (line 142) | OpaqueProduct_OPAQUE_PRODUCT_STATUS_DISCONTINUED OpaqueProduct_OpaquePro...
type OpaqueProduct_OpaqueProductDimensions_OpaqueUnit (line 185) | type OpaqueProduct_OpaqueProductDimensions_OpaqueUnit
method Enum (line 207) | func (x OpaqueProduct_OpaqueProductDimensions_OpaqueUnit) Enum() *Opaq...
method String (line 213) | func (x OpaqueProduct_OpaqueProductDimensions_OpaqueUnit) String() str...
method Descriptor (line 217) | func (OpaqueProduct_OpaqueProductDimensions_OpaqueUnit) Descriptor() p...
method Type (line 221) | func (OpaqueProduct_OpaqueProductDimensions_OpaqueUnit) Type() protore...
method Number (line 225) | func (x OpaqueProduct_OpaqueProductDimensions_OpaqueUnit) Number() pro...
constant OpaqueProduct_OpaqueProductDimensions_OPAQUE_UNIT_UNSPECIFIED (line 188) | OpaqueProduct_OpaqueProductDimensions_OPAQUE_UNIT_UNSPECIFIED OpaqueProd...
constant OpaqueProduct_OpaqueProductDimensions_OPAQUE_UNIT_METRIC (line 189) | OpaqueProduct_OpaqueProductDimensions_OPAQUE_UNIT_METRIC OpaqueProd...
constant OpaqueProduct_OpaqueProductDimensions_OPAQUE_UNIT_IMPERIAL (line 190) | OpaqueProduct_OpaqueProductDimensions_OPAQUE_UNIT_IMPERIAL OpaqueProd...
type OpaqueCustomer_OpaqueCustomerStatus (line 229) | type OpaqueCustomer_OpaqueCustomerStatus
method Enum (line 257) | func (x OpaqueCustomer_OpaqueCustomerStatus) Enum() *OpaqueCustomer_Op...
method String (line 263) | func (x OpaqueCustomer_OpaqueCustomerStatus) String() string {
method Descriptor (line 267) | func (OpaqueCustomer_OpaqueCustomerStatus) Descriptor() protoreflect.E...
method Type (line 271) | func (OpaqueCustomer_OpaqueCustomerStatus) Type() protoreflect.EnumType {
method Number (line 275) | func (x OpaqueCustomer_OpaqueCustomerStatus) Number() protoreflect.Enu...
constant OpaqueCustomer_OPAQUE_CUSTOMER_STATUS_UNSPECIFIED (line 232) | OpaqueCustomer_OPAQUE_CUSTOMER_STATUS_UNSPECIFIED OpaqueCustomer_OpaqueC...
constant OpaqueCustomer_OPAQUE_CUSTOMER_STATUS_ACTIVE (line 233) | OpaqueCustomer_OPAQUE_CUSTOMER_STATUS_ACTIVE OpaqueCustomer_OpaqueC...
constant OpaqueCustomer_OPAQUE_CUSTOMER_STATUS_INACTIVE (line 234) | OpaqueCustomer_OPAQUE_CUSTOMER_STATUS_INACTIVE OpaqueCustomer_OpaqueC...
constant OpaqueCustomer_OPAQUE_CUSTOMER_STATUS_SUSPENDED (line 235) | OpaqueCustomer_OPAQUE_CUSTOMER_STATUS_SUSPENDED OpaqueCustomer_OpaqueC...
constant OpaqueCustomer_OPAQUE_CUSTOMER_STATUS_DELETED (line 236) | OpaqueCustomer_OPAQUE_CUSTOMER_STATUS_DELETED OpaqueCustomer_OpaqueC...
type OpaqueOrder_OpaqueOrderStatus (line 279) | type OpaqueOrder_OpaqueOrderStatus
method Enum (line 313) | func (x OpaqueOrder_OpaqueOrderStatus) Enum() *OpaqueOrder_OpaqueOrder...
method String (line 319) | func (x OpaqueOrder_OpaqueOrderStatus) String() string {
method Descriptor (line 323) | func (OpaqueOrder_OpaqueOrderStatus) Descriptor() protoreflect.EnumDes...
method Type (line 327) | func (OpaqueOrder_OpaqueOrderStatus) Type() protoreflect.EnumType {
method Number (line 331) | func (x OpaqueOrder_OpaqueOrderStatus) Number() protoreflect.EnumNumber {
constant OpaqueOrder_OPAQUE_ORDER_STATUS_UNSPECIFIED (line 282) | OpaqueOrder_OPAQUE_ORDER_STATUS_UNSPECIFIED OpaqueOrder_OpaqueOrderStatu...
constant OpaqueOrder_OPAQUE_ORDER_STATUS_PENDING (line 283) | OpaqueOrder_OPAQUE_ORDER_STATUS_PENDING OpaqueOrder_OpaqueOrderStatu...
constant OpaqueOrder_OPAQUE_ORDER_STATUS_PROCESSING (line 284) | OpaqueOrder_OPAQUE_ORDER_STATUS_PROCESSING OpaqueOrder_OpaqueOrderStatu...
constant OpaqueOrder_OPAQUE_ORDER_STATUS_SHIPPED (line 285) | OpaqueOrder_OPAQUE_ORDER_STATUS_SHIPPED OpaqueOrder_OpaqueOrderStatu...
constant OpaqueOrder_OPAQUE_ORDER_STATUS_DELIVERED (line 286) | OpaqueOrder_OPAQUE_ORDER_STATUS_DELIVERED OpaqueOrder_OpaqueOrderStatu...
constant OpaqueOrder_OPAQUE_ORDER_STATUS_CANCELLED (line 287) | OpaqueOrder_OPAQUE_ORDER_STATUS_CANCELLED OpaqueOrder_OpaqueOrderStatu...
constant OpaqueOrder_OPAQUE_ORDER_STATUS_RETURNED (line 288) | OpaqueOrder_OPAQUE_ORDER_STATUS_RETURNED OpaqueOrder_OpaqueOrderStatu...
type OpaqueCustomerEvent_OpaqueEventType (line 335) | type OpaqueCustomerEvent_OpaqueEventType
method Enum (line 375) | func (x OpaqueCustomerEvent_OpaqueEventType) Enum() *OpaqueCustomerEve...
method String (line 381) | func (x OpaqueCustomerEvent_OpaqueEventType) String() string {
method Descriptor (line 385) | func (OpaqueCustomerEvent_OpaqueEventType) Descriptor() protoreflect.E...
method Type (line 389) | func (OpaqueCustomerEvent_OpaqueEventType) Type() protoreflect.EnumType {
method Number (line 393) | func (x OpaqueCustomerEvent_OpaqueEventType) Number() protoreflect.Enu...
constant OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_UNSPECIFIED (line 338) | OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_UNSPECIFIED OpaqueCustomerEv...
constant OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_PAGE_VIEW (line 339) | OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_PAGE_VIEW OpaqueCustomerEv...
constant OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_PRODUCT_VIEW (line 340) | OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_PRODUCT_VIEW OpaqueCustomerEv...
constant OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_ADD_TO_CART (line 341) | OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_ADD_TO_CART OpaqueCustomerEv...
constant OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_REMOVE_FROM_CART (line 342) | OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_REMOVE_FROM_CART OpaqueCustomerEv...
constant OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_CHECKOUT_START (line 343) | OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_CHECKOUT_START OpaqueCustomerEv...
constant OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_CHECKOUT_COMPLETE (line 344) | OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_CHECKOUT_COMPLETE OpaqueCustomerEv...
constant OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_SEARCH (line 345) | OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_SEARCH OpaqueCustomerEv...
constant OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_ACCOUNT_UPDATE (line 346) | OpaqueCustomerEvent_OPAQUE_EVENT_TYPE_ACCOUNT_UPDATE OpaqueCustomerEv...
type OpaqueActivityUpdate_OpaqueUpdateType (line 397) | type OpaqueActivityUpdate_OpaqueUpdateType
method Enum (line 431) | func (x OpaqueActivityUpdate_OpaqueUpdateType) Enum() *OpaqueActivityU...
method String (line 437) | func (x OpaqueActivityUpdate_OpaqueUpdateType) String() string {
method Descriptor (line 441) | func (OpaqueActivityUpdate_OpaqueUpdateType) Descriptor() protoreflect...
method Type (line 445) | func (OpaqueActivityUpdate_OpaqueUpdateType) Type() protoreflect.EnumT...
method Number (line 449) | func (x OpaqueActivityUpdate_OpaqueUpdateType) Number() protoreflect.E...
constant OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_UNSPECIFIED (line 400) | OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_UNSPECIFIED OpaqueActivityU...
constant OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_RECOMMENDATION (line 401) | OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_RECOMMENDATION OpaqueActivityU...
constant OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_NOTIFICATION (line 402) | OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_NOTIFICATION OpaqueActivityU...
constant OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_OFFER (line 403) | OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_OFFER OpaqueActivityU...
constant OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_INVENTORY_UPDATE (line 404) | OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_INVENTORY_UPDATE OpaqueActivityU...
constant OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_PRICE_CHANGE (line 405) | OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_PRICE_CHANGE OpaqueActivityU...
constant OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_CART_REMINDER (line 406) | OpaqueActivityUpdate_OPAQUE_UPDATE_TYPE_CART_REMINDER OpaqueActivityU...
type OpaqueUpdateProductRequest (line 454) | type OpaqueUpdateProductRequest struct
method Reset (line 462) | func (x *OpaqueUpdateProductRequest) Reset() {
method String (line 469) | func (x *OpaqueUpdateProductRequest) String() string {
method ProtoMessage (line 473) | func (*OpaqueUpdateProductRequest) ProtoMessage() {}
method ProtoReflect (line 475) | func (x *OpaqueUpdateProductRequest) ProtoReflect() protoreflect.Messa...
method GetProduct (line 487) | func (x *OpaqueUpdateProductRequest) GetProduct() *OpaqueProduct {
method GetUpdateMask (line 494) | func (x *OpaqueUpdateProductRequest) GetUpdateMask() *fieldmaskpb.Fiel...
method SetProduct (line 501) | func (x *OpaqueUpdateProductRequest) SetProduct(v *OpaqueProduct) {
method SetUpdateMask (line 505) | func (x *OpaqueUpdateProductRequest) SetUpdateMask(v *fieldmaskpb.Fiel...
method HasProduct (line 509) | func (x *OpaqueUpdateProductRequest) HasProduct() bool {
method HasUpdateMask (line 516) | func (x *OpaqueUpdateProductRequest) HasUpdateMask() bool {
method ClearProduct (line 523) | func (x *OpaqueUpdateProductRequest) ClearProduct() {
method ClearUpdateMask (line 527) | func (x *OpaqueUpdateProductRequest) ClearUpdateMask() {
type OpaqueUpdateProductRequest_builder (line 531) | type OpaqueUpdateProductRequest_builder struct
method Build (line 538) | func (b0 OpaqueUpdateProductRequest_builder) Build() *OpaqueUpdateProd...
type OpaqueUpdateProductResponse (line 548) | type OpaqueUpdateProductResponse struct
method R
Condensed preview — 549 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,608K chars).
[
{
"path": ".bazelci/presubmit.yml",
"chars": 428,
"preview": "---\nplatforms:\n ubuntu1804:\n build_flags:\n - \"--build_tag_filters=-nolinux\"\n build_targets:\n - \"//...\"\n "
},
{
"path": ".bazelrc",
"chars": 78,
"preview": "build --cxxopt=-std=c++17 --host_cxxopt=-std=c++17\nbuild --test_output=errors\n"
},
{
"path": ".bazelversion",
"chars": 6,
"preview": "9.0.1\n"
},
{
"path": ".devcontainer/devcontainer.json",
"chars": 746,
"preview": "// For format details, see https://aka.ms/devcontainer.json.\n{\n \"name\": \"Go\",\n \"build\": {\n \"dockerfile\": \"../.githu"
},
{
"path": ".git-blame-ignore-revs",
"chars": 97,
"preview": "# .git-blame-ignore-revs\n# Formatted all protobuf files\nbc0110188a8ef8e232050c3d9b347198dc83536a\n"
},
{
"path": ".github/Dockerfile",
"chars": 951,
"preview": "FROM golang:1.26.1\n\nRUN apt-get update && \\\n DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommend"
},
{
"path": ".github/ISSUE_TEMPLATE/bug.md",
"chars": 438,
"preview": "---\nname: 🐛 Bug Report\nabout: Submit a bug report to help us improve\n---\n\n## 🐛 Bug Report\n\n(A clear and concise descript"
},
{
"path": ".github/ISSUE_TEMPLATE/documentation.md",
"chars": 155,
"preview": "---\nname: 📚 Documentation\nabout: Report an issue related to documentation\n---\n\n## 📚 Documentation\n\n(A clear and concise "
},
{
"path": ".github/ISSUE_TEMPLATE/feature.md",
"chars": 148,
"preview": "---\nname: 🚀 Feature\nabout: Submit a proposal/request for a new feature\n---\n\n## 🚀 Feature\n\n(A clear and concise descripti"
},
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 2085,
"preview": "# The gRPC-Gateway project is maintained by volunteers in their spare time. Please follow these troubleshooting steps be"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 845,
"preview": "<!--\nThank you for sending the PR! We appreciate you spending the time to work on these changes.\n\nHelp us understand you"
},
{
"path": ".github/README_GITHUB.md",
"chars": 249,
"preview": "### What's up with the Dockerfile?\n\nThe `Dockerfile` in this folder is used as the build environment when regenerating t"
},
{
"path": ".github/dependabot.yml",
"chars": 605,
"preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
},
{
"path": ".github/stale.yml",
"chars": 705,
"preview": "# Number of days of inactivity before an issue becomes stale\ndaysUntilStale: 60\n# Number of days of inactivity before a "
},
{
"path": ".github/workflows/ci.yml",
"chars": 5710,
"preview": "on:\n - pull_request\npermissions:\n contents: read\nname: CI\njobs:\n build:\n strategy:\n matrix:\n go-versio"
},
{
"path": ".github/workflows/devcontainer.yml",
"chars": 938,
"preview": "on:\n push:\n paths:\n - .devcontainer/devcontainer.json\n - .github/workflows/devcontainer.yml\n - .githu"
},
{
"path": ".github/workflows/release.yml",
"chars": 2212,
"preview": "on:\n push:\n tags:\n - v2.[0-9]+.[0-9]+\n # For testing the workflow before pushing a tag\n # This will run gorel"
},
{
"path": ".github/workflows/renovate.yml",
"chars": 2917,
"preview": "on:\n push:\n branches:\n - renovate/*\npermissions:\n contents: read\nname: renovate\njobs:\n update_repositoriesbzl"
},
{
"path": ".gitignore",
"chars": 162,
"preview": "_output/\n.idea\n\n# Bazel.\nbazel-bin\nbazel-genfiles\nbazel-grpc-gateway\nbazel-out\nbazel-testlogs\n\n# Go vendor directory\nven"
},
{
"path": ".goreleaser.yml",
"chars": 714,
"preview": "version: 2\nbuilds:\n - main: ./protoc-gen-grpc-gateway/main.go\n id: protoc-gen-grpc-gateway\n binary: protoc-gen-gr"
},
{
"path": "ADOPTERS.md",
"chars": 1800,
"preview": "# Adopters\n\nThis is a list of organizations that have spoken publicly about their adoption or\nproduction users that have"
},
{
"path": "BUILD.bazel",
"chars": 3199,
"preview": "load(\"@bazel_gazelle//:def.bzl\", \"gazelle\")\nload(\"@com_github_bazelbuild_buildtools//buildifier:def.bzl\", \"buildifier\")\n"
},
{
"path": "CONTRIBUTING.md",
"chars": 2742,
"preview": "# How to contribute\n\n## Code reviews\n\nAll submissions, including submissions by project members, require review.\n\n## I w"
},
{
"path": "LICENSE",
"chars": 1511,
"preview": "Copyright (c) 2015, Gengo, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without"
},
{
"path": "MODULE.bazel",
"chars": 2785,
"preview": "module(\n name = \"grpc_ecosystem_grpc_gateway\",\n # TODO: Change this to the actual version on each release.\n # "
},
{
"path": "Makefile",
"chars": 10646,
"preview": "# This is a Makefile which maintains files automatically generated but to be\n# shipped together with other files.\n# You "
},
{
"path": "README.md",
"chars": 23903,
"preview": "<div align=\"center\">\n<h1>gRPC-Gateway</h1>\n<p>\ngRPC to JSON proxy generator following the gRPC HTTP spec\n</p>\n<a href=\"h"
},
{
"path": "WORKSPACE",
"chars": 5086,
"preview": "workspace(name = \"grpc_ecosystem_grpc_gateway\")\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"git_repository\")\nl"
},
{
"path": "bin/.gitignore",
"chars": 82,
"preview": "/protoc-gen-go\n/protoc-gen-go-grpc\n/protoc-gen-grpc-gateway\n/protoc-gen-openapiv2\n"
},
{
"path": "buf.gen.yaml",
"chars": 474,
"preview": "version: v2\nplugins:\n - remote: buf.build/protocolbuffers/go:v1.35.1\n out: .\n opt:\n - paths=source_relative\n"
},
{
"path": "buf.yaml",
"chars": 12673,
"preview": "version: v1\nname: buf.build/grpc-ecosystem/grpc-gateway\ndeps:\n - buf.build/googleapis/googleapis\nbreaking:\n use:\n -"
},
{
"path": "docs/.gitignore",
"chars": 60,
"preview": "*.gem\n.bundle\n.ruby-version\n.jekyll-cache\n.sass-cache\n_site\n"
},
{
"path": "docs/Gemfile",
"chars": 443,
"preview": "source \"https://rubygems.org\"\ngem \"just-the-docs\"\ngroup :jekyll_plugins do\n gem \"github-pages\" # GitHub"
},
{
"path": "docs/_config.yml",
"chars": 3980,
"preview": "# Site settings\n# These are used to personalize your new site. If you look in the HTML files,\n# you will see them access"
},
{
"path": "docs/_layouts/default.html",
"chars": 8888,
"preview": "---\nlayout: table_wrappers\n---\n\n<!DOCTYPE html>\n\n<html lang=\"{{ site.lang | default: 'en-US' }}\">\n{% include head.html %"
},
{
"path": "docs/docs/contributing/2020_season_of_docs.md",
"chars": 566,
"preview": "---\nlayout: default\ntitle: Google Season of Docs\nnav_order: 1\nparent: Contributing\n---\n\n# 2020 Season of Docs\n\n<div alig"
},
{
"path": "docs/docs/contributing/getting_started.md",
"chars": 200,
"preview": "---\nlayout: default\ntitle: Getting started\nnav_order: 0\nparent: Contributing\n---\n\n# How to contribute\n\nSee [CONTRIBUTING"
},
{
"path": "docs/docs/contributing/index.md",
"chars": 76,
"preview": "---\nlayout: default\ntitle: Contributing\nnav_order: 5\nhas_children: true\n---\n"
},
{
"path": "docs/docs/development/grpc-gateway_v2_migration_guide.md",
"chars": 6067,
"preview": "---\nlayout: default\ntitle: gRPC-Gateway v2 migration guide\nnav_order: 0\nparent: Development\n---\n\n# gRPC-Gateway v2 migra"
},
{
"path": "docs/docs/development/index.md",
"chars": 75,
"preview": "---\nlayout: default\ntitle: Development\nnav_order: 4\nhas_children: true\n---\n"
},
{
"path": "docs/docs/development/installation_for_cygwin.md",
"chars": 4637,
"preview": "---\nlayout: default\ntitle: Installation for Cygwin\nnav_order: 1\nparent: Development\n---\n\n# Installation for Cygwin\n\n<div"
},
{
"path": "docs/docs/faq.md",
"chars": 4821,
"preview": "---\nlayout: default\ntitle: FAQ\nnav_order: 7\n---\n\n# FAQ\n\n## How can I write the annotations which gRPC-Gateway requires?\n"
},
{
"path": "docs/docs/mapping/binary_file_uploads.md",
"chars": 1421,
"preview": "---\nlayout: default\ntitle: Binary file uploads\nnav_order: 2\nparent: Mapping\n---\n\n# Binary file uploads\n\nIf you need to d"
},
{
"path": "docs/docs/mapping/custom_marshalers.md",
"chars": 2343,
"preview": "---\nlayout: default\ntitle: Custom marshalers\nnav_order: 6\nparent: Mapping\n---\n\n# Custom marshalers\n\n[`Marshaler`](https:"
},
{
"path": "docs/docs/mapping/customizing_openapi_output.md",
"chars": 37023,
"preview": "---\nlayout: default\ntitle: Customizing OpenAPI Output\nnav_order: 4\nparent: Mapping\n---\n\n{% raw %}\n\n# Customizing OpenAPI"
},
{
"path": "docs/docs/mapping/customizing_your_gateway.md",
"chars": 17240,
"preview": "---\nlayout: default\ntitle: Customizing your gateway\nnav_order: 5\nparent: Mapping\n---\n\n# Customizing your gateway\n\n## Mes"
},
{
"path": "docs/docs/mapping/examples.md",
"chars": 2583,
"preview": "---\nlayout: default\ntitle: Examples\nnav_order: 0\nparent: Mapping\n---\n\n# Examples\n\nExamples are available under `examples"
},
{
"path": "docs/docs/mapping/grpc_api_configuration.md",
"chars": 6139,
"preview": "---\nlayout: default\ntitle: gRPC API Configuration\nnav_order: 3\nparent: Mapping\n---\n\n# gRPC API Configuration\n\nIn some si"
},
{
"path": "docs/docs/mapping/httpbody_messages.md",
"chars": 1704,
"preview": "---\nlayout: default\ntitle: HttpBody Messages\nnav_order: 1\nparent: Mapping\n---\n\n# HttpBody Messages\n\nThe [HTTPBody](https"
},
{
"path": "docs/docs/mapping/index.md",
"chars": 71,
"preview": "---\nlayout: default\ntitle: Mapping\nnav_order: 2\nhas_children: true\n---\n"
},
{
"path": "docs/docs/mapping/patch_feature.md",
"chars": 3697,
"preview": "---\nlayout: default\ntitle: Patch feature\nnav_order: 2\nparent: Mapping\n---\n\n# Patch feature\n\nThe HTTP PATCH method allows"
},
{
"path": "docs/docs/mapping/using_ref_with_responses.md",
"chars": 1274,
"preview": "# Using arbitrary messages in response description\n\nAssuming a protobuf file of the structure\n\n```protobuf\nsyntax = \"pro"
},
{
"path": "docs/docs/operations/annotated_context.md",
"chars": 1675,
"preview": "---\nlayout: default\ntitle: Extracting the HTTP path pattern for a request\nnav_order: 4\nparent: Operations\n---\n\n# Extract"
},
{
"path": "docs/docs/operations/aws_gateway_integration.md",
"chars": 989,
"preview": "---\nlayout: default\ntitle: AWS gateway integration\nnav_order: 3\nparent: Operations\n---\n\n# AWS gateway integration\n\n## Im"
},
{
"path": "docs/docs/operations/health_check.md",
"chars": 2355,
"preview": "---\nlayout: default\ntitle: Health check\nnav_order: 1\nparent: Operations\n---\n\n# Health check\n\n## With the [gRPC Health Ch"
},
{
"path": "docs/docs/operations/index.md",
"chars": 74,
"preview": "---\nlayout: default\ntitle: Operations\nnav_order: 3\nhas_children: true\n---\n"
},
{
"path": "docs/docs/operations/inject_router.md",
"chars": 1301,
"preview": "---\nlayout: default\ntitle: Adding custom routes to the mux\nnav_order: 0\nparent: Operations\n---\n\n# Adding custom routes t"
},
{
"path": "docs/docs/operations/logging.md",
"chars": 2027,
"preview": "---\nlayout: default\ntitle: Logging the request body pattern for a request\nnav_order: 5\nparent: Operations\n---\n\n# Logging"
},
{
"path": "docs/docs/operations/tracing.md",
"chars": 5788,
"preview": "---\nlayout: default\ntitle: Tracing\nnav_order: 2\nparent: Operations\n---\n\n# Tracing\n\n## With [OpenCensus.io](https://openc"
},
{
"path": "docs/docs/overview/background.md",
"chars": 765,
"preview": "---\nlayout: default\ntitle: Background\nnav_order: 0\nparent: Overview\n---\n\n# Background\n\ngRPC is great -- it generates API"
},
{
"path": "docs/docs/overview/index.md",
"chars": 72,
"preview": "---\nlayout: default\ntitle: Overview\nnav_order: 1\nhas_children: true\n---\n"
},
{
"path": "docs/docs/overview/usage.md",
"chars": 255,
"preview": "---\nlayout: default\ntitle: How do I use this?\nnav_order: 1\nparent: Overview\n---\n\n# How do I use this?\n\nFollow the [instr"
},
{
"path": "docs/docs/related_projects.md",
"chars": 1573,
"preview": "---\nlayout: default\ntitle: Related projects\nnav_order: 8\n---\n\n# Related projects\n\n- [grpc-dynamic-gateway](https://githu"
},
{
"path": "docs/docs/tutorials/adding_annotations.md",
"chars": 5560,
"preview": "---\nlayout: default\ntitle: Adding gRPC-Gateway annotations to an existing proto file\nnav_order: 4\nparent: Tutorials\n---\n"
},
{
"path": "docs/docs/tutorials/creating_main.go.md",
"chars": 1463,
"preview": "---\nlayout: default\ntitle: Creating main.go\nnav_order: 3\nparent: Tutorials\n---\n\n# Creating main.go\n\nBefore creating `mai"
},
{
"path": "docs/docs/tutorials/generating_stubs/index.md",
"chars": 502,
"preview": "---\nlayout: default\ntitle: Generating stubs\nparent: Tutorials\nnav_order: 2\nhas_children: true\n---\n\nFor generating the st"
},
{
"path": "docs/docs/tutorials/generating_stubs/using_buf.md",
"chars": 1953,
"preview": "---\nlayout: default\ntitle: Generating stubs using buf\nnav_order: 0\nparent: Generating stubs\ngrand_parent: Tutorials\n---\n"
},
{
"path": "docs/docs/tutorials/generating_stubs/using_protoc.md",
"chars": 1040,
"preview": "---\nlayout: default\ntitle: Generating stubs using protoc\nnav_order: 1\nparent: Generating stubs\ngrand_parent: Tutorials\n-"
},
{
"path": "docs/docs/tutorials/index.md",
"chars": 73,
"preview": "---\nlayout: default\ntitle: Tutorials\nnav_order: 6\nhas_children: true\n---\n"
},
{
"path": "docs/docs/tutorials/introduction.md",
"chars": 3126,
"preview": "---\nlayout: default\ntitle: Introduction to the gRPC-Gateway\nnav_order: 0\nparent: Tutorials\n---\n\n# Introduction to the gR"
},
{
"path": "docs/docs/tutorials/learn_more.md",
"chars": 946,
"preview": "---\nlayout: default\ntitle: Learn More\nnav_order: 5\nparent: Tutorials\n---\n\n# Learn More\n\n## How it works\n\nWhen the HTTP r"
},
{
"path": "docs/docs/tutorials/simple_hello_world.md",
"chars": 1430,
"preview": "---\nlayout: default\ntitle: Creating a simple hello world with gRPC\nnav_order: 1\nparent: Tutorials\n---\n\n# Creating a simp"
},
{
"path": "docs/docs/using_custom_query_parser.md",
"chars": 4531,
"preview": "# Custom Query Parameter Parsing in gRPC-Gateway\nThe gRPC-Gateway allows you to customize the way query parameters are p"
},
{
"path": "docs/index.md",
"chars": 2642,
"preview": "---\nlayout: default\ntitle: gRPC-Gateway\nnav_order: 0\ndescription: \"Documentation site for the gRPC-Gateway\"\npermalink: /"
},
{
"path": "docs/run.sh",
"chars": 847,
"preview": "#! /bin/bash\n\nset -e\n\nJEKYLL_VERSION=4\nBUNDLE_DIR=\"/tmp/grpc-gateway-bundle\"\n\nif [ ! -d \"${BUNDLE_DIR}\" ]; then\n mkdir "
},
{
"path": "examples/internal/README.md",
"chars": 816,
"preview": "# One way to run the example\n\n```bash\n# Handle dependencies\n$ dep init\n```\n\nFollow the guides from this [README.md](./br"
},
{
"path": "examples/internal/browser/.gitignore",
"chars": 32,
"preview": "/bower_components\n/node_modules\n"
},
{
"path": "examples/internal/browser/README.md",
"chars": 499,
"preview": "# Browser example\n\nThis directory contains an example use of gRPC-Gateway with web browsers.\nThe following commands auto"
},
{
"path": "examples/internal/browser/a_bit_of_everything_service.spec.js",
"chars": 8399,
"preview": "'use strict';\n\nvar SwaggerClient = require('swagger-client');\n\ndescribe('ABitOfEverythingService', function () {\n var c"
},
{
"path": "examples/internal/browser/bin/.gitignore",
"chars": 16,
"preview": "/*\n!/.gitignore\n"
},
{
"path": "examples/internal/browser/bower.json",
"chars": 469,
"preview": "{\n \"name\": \"grpc-gateway-example-browser\",\n \"description\": \"Example use of gRPC-Gateway from browser\",\n \"main\": \"inde"
},
{
"path": "examples/internal/browser/echo_service.spec.js",
"chars": 1368,
"preview": "'use strict';\n\nvar SwaggerClient = require('swagger-client');\n\ndescribe('EchoService', function () {\n var client;\n\n be"
},
{
"path": "examples/internal/browser/gulpfile.js",
"chars": 12322,
"preview": "\"use strict\";\n\nconst { exec, spawn } = require('child_process');\nconst util = require('util');\nconst path = require('pat"
},
{
"path": "examples/internal/browser/index.html",
"chars": 682,
"preview": "<!DOCTYPE html>\n<html>\n <head>\n <script type=\"application/javascript\" src=\"bower_components/swagger-js/browser/swagg"
},
{
"path": "examples/internal/browser/package.json",
"chars": 499,
"preview": "{\n \"name\": \"grpc-gateway-example\",\n \"version\": \"1.0.0\",\n \"description\": \"Example use of gRPC-Gateway from browser\",\n "
},
{
"path": "examples/internal/browser/spec/support/jasmine-browser.json",
"chars": 271,
"preview": "{\n \"srcDir\": \".\",\n \"srcFiles\": [],\n \"specDir\": \"bin\",\n \"specFiles\": [\n \"spec.js\"\n ],\n \"helpers\": [],\n \"env\": {"
},
{
"path": "examples/internal/browser/webpack.config.js",
"chars": 100,
"preview": "const path = require('path');\n\nmodule.exports = {\n mode: 'development',\n devtool: 'source-map'\n};\n"
},
{
"path": "examples/internal/clients/abe/.gitignore",
"chars": 6,
"preview": "/docs\n"
},
{
"path": "examples/internal/clients/abe/.swagger-codegen/VERSION",
"chars": 5,
"preview": "2.4.8"
},
{
"path": "examples/internal/clients/abe/.swagger-codegen-ignore",
"chars": 11,
"preview": ".gitignore\n"
},
{
"path": "examples/internal/clients/abe/BUILD.bazel",
"chars": 3164,
"preview": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ngo_library("
},
{
"path": "examples/internal/clients/abe/api/swagger.yaml",
"chars": 221874,
"preview": "---\nswagger: \"2.0\"\ninfo:\n version: \"1.0\"\n title: \"A Bit of Everything\"\n contact:\n name: \"gRPC-Gateway project\"\n "
},
{
"path": "examples/internal/clients/abe/api_a_bit_of_everything.go",
"chars": 317310,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/api_camel_case_service_name.go",
"chars": 5509,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/api_echo_rpc.go",
"chars": 17489,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/api_snake_enum_service.go",
"chars": 5942,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/client.go",
"chars": 11674,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/configuration.go",
"chars": 2149,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/enum_helper.go",
"chars": 1614,
"preview": "package abe\n\nimport (\n\tpbexamplepb \"github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb\"\n\tpbpath"
},
{
"path": "examples/internal/clients/abe/model_a_bit_of_everything.go",
"chars": 3941,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_a_bit_of_everything_1.go",
"chars": 3942,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_a_bit_of_everything_2.go",
"chars": 3942,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_a_bit_of_everything_3.go",
"chars": 3911,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_a_bit_of_everything_4.go",
"chars": 3991,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_a_bit_of_everything_5.go",
"chars": 3021,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_a_bit_of_everything_6.go",
"chars": 3021,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_a_bit_of_everything_7.go",
"chars": 3021,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_a_bit_of_everything_8.go",
"chars": 3021,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_a_bit_of_everything_nested.go",
"chars": 526,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_a_bit_of_everything_service_deep_path_echo_body.go",
"chars": 4020,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_a_bit_of_everything_service_deep_path_echo_body_single_nested.go",
"chars": 492,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_a_bit_of_everything_service_post_with_empty_body_body.go",
"chars": 351,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_a_bit_of_everything_service_update_body.go",
"chars": 3927,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_a_bit_of_everything_service_update_v2_body.go",
"chars": 463,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_book.go",
"chars": 636,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go",
"chars": 3977,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_examplepb_a_bit_of_everything_repeated.go",
"chars": 1577,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_examplepb_a_bit_of_everything_service_update_body.go",
"chars": 3967,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_examplepb_bar.go",
"chars": 342,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_examplepb_body.go",
"chars": 357,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_examplepb_book.go",
"chars": 821,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_examplepb_check_status_response.go",
"chars": 386,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_examplepb_error_object.go",
"chars": 445,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_examplepb_error_response.go",
"chars": 487,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_examplepb_numeric_enum.go",
"chars": 531,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_examplepb_required_message_type_request.go",
"chars": 402,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_examplepb_snake_case_0_enum.go",
"chars": 640,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_examplepb_snake_case_enum.go",
"chars": 632,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_examplepb_snake_enum_response.go",
"chars": 333,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_google_rpc_status.go",
"chars": 1303,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_message_path_enum_nested_path_enum.go",
"chars": 530,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_nested_deep_enum.go",
"chars": 540,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_oneofenum_example_enum.go",
"chars": 522,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_pathenum_path_enum.go",
"chars": 452,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_pathenum_snake_case_for_import.go",
"chars": 661,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_proto_examplepb_foo.go",
"chars": 356,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_protobuf_any.go",
"chars": 4031,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_sub_string_message.go",
"chars": 362,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_the_book_to_update_.go",
"chars": 619,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_the_book_to_update__1.go",
"chars": 617,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_the_book_to_update_the_books_name_field_is_used_to_identify_the_book_to_be_updated_format_publisherspublisherbooksbook.go",
"chars": 588,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask.go",
"chars": 493,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask_1.go",
"chars": 493,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/model_v1exampledeep_pathsingle_nested_name_single_nested.go",
"chars": 486,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/abe/response.go",
"chars": 1301,
"preview": "/*\n * A Bit of Everything\n *\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swa"
},
{
"path": "examples/internal/clients/echo/.gitignore",
"chars": 6,
"preview": "/docs\n"
},
{
"path": "examples/internal/clients/echo/.swagger-codegen/VERSION",
"chars": 5,
"preview": "2.4.8"
},
{
"path": "examples/internal/clients/echo/.swagger-codegen-ignore",
"chars": 11,
"preview": ".gitignore\n"
},
{
"path": "examples/internal/clients/echo/BUILD.bazel",
"chars": 1101,
"preview": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ngo_library("
},
{
"path": "examples/internal/clients/echo/api/swagger.yaml",
"chars": 38521,
"preview": "---\nswagger: \"2.0\"\ninfo:\n description: \"Echo Service API consists of a single service which returns\\na message.\"\n vers"
},
{
"path": "examples/internal/clients/echo/api_echo_service.go",
"chars": 72621,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/echo/client.go",
"chars": 11277,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/echo/configuration.go",
"chars": 2096,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/echo/model_examplepb_dynamic_message.go",
"chars": 499,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/echo/model_examplepb_dynamic_message_update.go",
"chars": 386,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/echo/model_examplepb_embedded.go",
"chars": 412,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/echo/model_examplepb_nested_message.go",
"chars": 345,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/echo/model_examplepb_simple_message.go",
"chars": 768,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/echo/model_examplepb_status_check_request.go",
"chars": 544,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/echo/model_examplepb_status_check_response.go",
"chars": 437,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/echo/model_google_rpc_status.go",
"chars": 1249,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/echo/model_proto_sub2_status.go",
"chars": 412,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/echo/model_proto_sub_status.go",
"chars": 346,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/echo/model_protobuf_any.go",
"chars": 3977,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/echo/model_protobuf_null_value.go",
"chars": 571,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/echo/response.go",
"chars": 1247,
"preview": "/*\n * Echo Service\n *\n * Echo Service API consists of a single service which returns a message.\n *\n * API version: versi"
},
{
"path": "examples/internal/clients/generateunboundmethods/.gitignore",
"chars": 6,
"preview": "/docs\n"
},
{
"path": "examples/internal/clients/generateunboundmethods/.swagger-codegen/VERSION",
"chars": 5,
"preview": "2.4.8"
},
{
"path": "examples/internal/clients/generateunboundmethods/.swagger-codegen-ignore",
"chars": 11,
"preview": ".gitignore\n"
},
{
"path": "examples/internal/clients/generateunboundmethods/BUILD.bazel",
"chars": 759,
"preview": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\n\ngo_library(\n name = \"generateunboundmethods\",\n srcs = [\n "
},
{
"path": "examples/internal/clients/generateunboundmethods/api/swagger.yaml",
"chars": 4421,
"preview": "---\nswagger: \"2.0\"\ninfo:\n description: \"Generate Unannotated Methods Echo Service\\nSimilar to echo_service.proto\\\n \\"
},
{
"path": "examples/internal/clients/generateunboundmethods/api_generate_unbound_methods_echo_service.go",
"chars": 12039,
"preview": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service S"
},
{
"path": "examples/internal/clients/generateunboundmethods/client.go",
"chars": 11649,
"preview": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service S"
},
{
"path": "examples/internal/clients/generateunboundmethods/configuration.go",
"chars": 2328,
"preview": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service S"
},
{
"path": "examples/internal/clients/generateunboundmethods/docs/ExamplepbGenerateUnboundMethodsSimpleMessage.md",
"chars": 528,
"preview": "# ExamplepbGenerateUnboundMethodsSimpleMessage\n\n## Properties\nName | Type | Description | Notes\n------------ | ---------"
},
{
"path": "examples/internal/clients/generateunboundmethods/docs/GenerateUnboundMethodsEchoServiceApi.md",
"chars": 4489,
"preview": "# \\GenerateUnboundMethodsEchoServiceApi\n\nAll URIs are relative to *https://localhost*\n\nMethod | HTTP request | Descripti"
},
{
"path": "examples/internal/clients/generateunboundmethods/docs/ProtobufAny.md",
"chars": 346,
"preview": "# ProtobufAny\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | ----------"
},
{
"path": "examples/internal/clients/generateunboundmethods/docs/RuntimeError.md",
"chars": 546,
"preview": "# RuntimeError\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ------------- | ---------"
},
{
"path": "examples/internal/clients/generateunboundmethods/model_examplepb_generate_unbound_methods_simple_message.go",
"chars": 818,
"preview": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service S"
},
{
"path": "examples/internal/clients/generateunboundmethods/model_protobuf_any.go",
"chars": 535,
"preview": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service S"
},
{
"path": "examples/internal/clients/generateunboundmethods/model_rpc_status.go",
"chars": 623,
"preview": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service S"
},
{
"path": "examples/internal/clients/generateunboundmethods/model_runtime_error.go",
"chars": 666,
"preview": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service S"
},
{
"path": "examples/internal/clients/generateunboundmethods/response.go",
"chars": 1479,
"preview": "/*\n * examples/internal/proto/examplepb/generate_unbound_methods.proto\n *\n * Generate Unannotated Methods Echo Service S"
},
{
"path": "examples/internal/clients/responsebody/.gitignore",
"chars": 266,
"preview": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture spe"
},
{
"path": "examples/internal/clients/responsebody/.swagger-codegen/VERSION",
"chars": 5,
"preview": "2.4.8"
},
{
"path": "examples/internal/clients/responsebody/.swagger-codegen-ignore",
"chars": 1030,
"preview": "# Swagger Codegen Ignore\n# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen\n\n# Use this file "
},
{
"path": "examples/internal/clients/responsebody/BUILD.bazel",
"chars": 1051,
"preview": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\")\n\ngo_library(\n name = \"responsebody\",\n srcs = [\n \"api_r"
},
{
"path": "examples/internal/clients/responsebody/api/swagger.yaml",
"chars": 10658,
"preview": "---\nswagger: \"2.0\"\ninfo:\n version: \"version not set\"\n title: \"examples/internal/proto/examplepb/response_body_service."
},
{
"path": "examples/internal/clients/responsebody/api_response_body_service.go",
"chars": 17670,
"preview": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger "
},
{
"path": "examples/internal/clients/responsebody/client.go",
"chars": 11446,
"preview": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger "
},
{
"path": "examples/internal/clients/responsebody/configuration.go",
"chars": 2184,
"preview": "/*\n * examples/internal/proto/examplepb/response_body_service.proto\n *\n * No description provided (generated by Swagger "
},
{
"path": "examples/internal/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOut.md",
"chars": 453,
"preview": "# ExamplepbRepeatedResponseBodyOut\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | -----"
},
{
"path": "examples/internal/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md",
"chars": 473,
"preview": "# ExamplepbRepeatedResponseBodyOutResponse\n\n## Properties\nName | Type | Description | Notes\n------------ | -------------"
},
{
"path": "examples/internal/clients/responsebody/docs/ExamplepbRepeatedResponseStrings.md",
"chars": 370,
"preview": "# ExamplepbRepeatedResponseStrings\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | -----"
},
{
"path": "examples/internal/clients/responsebody/docs/ExamplepbResponseBodyMessage.md",
"chars": 498,
"preview": "# ExamplepbResponseBodyMessage\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | ---------"
},
{
"path": "examples/internal/clients/responsebody/docs/ExamplepbResponseBodyMessageResponse.md",
"chars": 370,
"preview": "# ExamplepbResponseBodyMessageResponse\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | -"
},
{
"path": "examples/internal/clients/responsebody/docs/ExamplepbResponseBodyOut.md",
"chars": 428,
"preview": "# ExamplepbResponseBodyOut\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | -------------"
},
{
"path": "examples/internal/clients/responsebody/docs/ExamplepbResponseBodyOutResponse.md",
"chars": 366,
"preview": "# ExamplepbResponseBodyOutResponse\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | -----"
},
{
"path": "examples/internal/clients/responsebody/docs/ExamplepbResponseBodyReq.md",
"chars": 358,
"preview": "# ExamplepbResponseBodyReq\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | -------------"
},
{
"path": "examples/internal/clients/responsebody/docs/ExamplepbResponseBodyValue.md",
"chars": 373,
"preview": "# ExamplepbResponseBodyValue\n\n## Properties\nName | Type | Description | Notes\n------------ | ------------- | -----------"
}
]
// ... and 349 more files (download for full content)
About this extraction
This page contains the full source code of the grpc-ecosystem/grpc-gateway GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 549 files (5.8 MB), approximately 1.6M tokens, and a symbol index with 6259 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.